2016-08-31 10 views
3

私はリストのリストを持っています。私は参照ベクトルに従ってこれを注文したいと思う。これは、注文データフレームのquestionに似ています。しかし私はそれを実装するために苦労した。ターゲットベクトルを使用して要素をリストに並べる方法は?

「ターゲット」ベクトルの順序に従って、このキーを「キー」で並べ替える必要があります。

target <- c("c", "b", "a") 
L <- list(
      X = list(key = "a", val = 6), 
      Y = list(key = "b", val = 5), 
      Y = list(key = "b", val = 0), 
      Z = list(key = "c", val = 4) 
     ) 

答えて

0

私のために、次の作品は - 線で書かれた行解説の目的のために

# Get keys from the original list 
sapply(L, `[[`, "key") 
# Use match to order these 
match(sapply(L, `[[`, "key"), target) 
# Now select those items from the original list using the reference from match 
L[match(sapply(L, `[[`, "key"), target)] 
+0

私は作品を思ういけません。 'Z'要素は失われているようです。 –

+2

あなたは 'order':' L [order(match(sapply(L、 "[["、 "key")、target))] 'が必要です。 – Roland

+0

次のようなことをしてください: 'L [order(sapply(L、' [['' key ''、target))] ' – Choubi

1

ここでは一つのアプローチです:

L[order(vapply(L, 
       function(x, target) which(x$key == target), 
       target = target, 
       FUN.VALUE = 1L) 
     ) 
] 
#$Z 
#$Z$key 
#[1] "c" 
# 
#$Z$val 
#[1] 4 
# 
# 
#$Y 
#$Y$key 
#[1] "b" 
# 
#$Y$val 
#[1] 5 
# 
# 
#$Y 
#$Y$key 
#[1] "b" 
# 
#$Y$val 
#[1] 0 
# 
# 
#$X 
#$X$key 
#[1] "a" 
# 
#$X$val 
#[1] 6 
関連する問題