2017-06-29 9 views
1

どのようにしてベクトルをデータのリストにcbind/appendすることができますか?data.framesのリストにベクトルを追加する方法は?

lapply(l, function(x) cbind(l[[x]], fname = rep(file_name, each = nrow(l[[x]])))) 

を私はエラーを取得:

l <- list(data.frame(a=c(1,2,3), b=c(1,2,3)), data.frame(a=c(1,2,3,4), b=c(1,2,3,4))) 
l 
file_name <- c("myfile.txt", "yourfile.txt") 
file_name 

私が試した

​​3210

答えて

1

我々はそれ

に対応した 'FILE_NAME' を追加することによって Map create a new column 'fname' for each of theにlist`要素を使用することができます
Map(cbind, l, fname = file_name) 

我々はlist

lapply(seq_along(l), function(i) transform(l[[i]], fname = file_name[i])) 
0

のシーケンスをループ念のため、その後、lapplyを使用している場合..あなたはdata.framesの次のリストを持っている...

l <- list(data.frame(a=c(1,2,3), b=c(1,2,3)), data.frame(a=c(1,2,3,4), b=c(1,2,3,4))) 
l 
[[1]] 
    a b 
1 1 1 
2 2 2 
3 3 3 

[[2]] 
    a b 
1 1 1 
2 2 2 
3 3 3 
4 4 4 

最終的にリスト内のすべてのデータフレームにベクトル(リストごとに異なる)をバインドしたいと思っています。

[[1]] 
    a b v 
1 1 1 a 
2 2 2 b 
3 3 3 c 

[[2]] 
    a b v 
1 1 1 a 
2 2 2 b 
3 3 3 c 
4 4 4 d 
012私たちが行うことができます

1つのトリックは...一緒にすべてのフレームを取得し、そのIDの

L = rbindlist(l,idcol = TRUE) 

を維持し、我々はまた、我々は、各データに追加したいリストを持っていることを言わせする第1の使用rbindlistにあります.frame

v = list(data.frame(v = letters[1:3]), data.frame(v = LETTERS[1:4])) 
V = rbindlist(v) 

は、今、私たちは、単純なCBINDを行い、その後、我々は

result = cbind(L,V) 
final_result = split(result,on = ".id") 

    $`1` 
    .id a b v 
1: 1 1 1 a 
2: 1 2 2 b 
3: 1 3 3 c 

$`2` 
    .id a b v 
1: 2 1 1 A 
2: 2 2 2 B 
3: 2 3 3 C 
4: 2 4 4 D 

を作成した.IDを使用してリストを分割することができます我々はまだ.ID COLを持っていますそこには..しかし、その1つを取り除くにはあまりにも多くのトラブルではありません..

関連する問題