2017-06-29 21 views
1

如何將一個向量綁定/追加到data.frames列表中?如何將矢量追加到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 
file_name <- c("myfile.txt", "yourfile.txt") 
file_name 

我想:

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

,但我得到一個錯誤:通過追加相應的 'FILE_NAME' 它

​​3210

回答

1

我們可以使用Mapcreate a new column 'fname' for each of the list`元素

Map(cbind, l, fname = file_name) 

如果我們使用lapply,然後通過的list

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

順序循環只是爲了確保..你有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 

一個技巧,我們可以做的,是先用rbindlist讓所有的幀一起..和保持他們的ID

L = rbindlist(l,idcol = TRUE) 

而且我們說,我們也有,我們想追加到每一個數據的列表.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在那裏..但那不應該是太難以擺脫那一個..

相關問題