我有一个数据框列表(C)。我想为每个数据框添加一个新变量“d”,它是“a”和“b”的总和。这是一个简短的例子。
A<-data.frame(1:10, 101:110, 201:210)
colnames(A)=c("a","b", "c")
B<-data.frame(11:20, 111:120, 211:220)
colnames(B)=c("a","b", "c")
C<-list(A, B)
我试过这个,但我认为可能会有更简单的事情,特别是考虑到行的最后一部分( value= (("["(C[[x]][1]))) + ("["(C[[x]][2])) )
lapply(seq(C), function(x) "[[<-" (C[[x]], 3, value= (("["(C[[x]][1]))) + ("["(C[[x]][2])))
有什么想法吗? 顺便说一句,我如何选择创建的变量的名称? Thanx提前
答案 0 :(得分:2)
使用within
:
out <- lapply(C, function(x) within(x, d <- a + b))
结果如下:
> str(out)
List of 2
$ :'data.frame': 10 obs. of 4 variables:
..$ a: int [1:10] 1 2 3 4 5 6 7 8 9 10
..$ b: int [1:10] 101 102 103 104 105 106 107 108 109 110
..$ c: int [1:10] 201 202 203 204 205 206 207 208 209 210
..$ d: int [1:10] 102 104 106 108 110 112 114 116 118 120
$ :'data.frame': 10 obs. of 4 variables:
..$ a: int [1:10] 11 12 13 14 15 16 17 18 19 20
..$ b: int [1:10] 111 112 113 114 115 116 117 118 119 120
..$ c: int [1:10] 211 212 213 214 215 216 217 218 219 220
..$ d: int [1:10] 122 124 126 128 130 132 134 136 138 140
然后,您可以将out
存储为C
(即C <- out
)以替换原始列表。我只是在这里使用out
来向您展示正在发生的事情。
答案 1 :(得分:2)
或使用cbind
C <- lapply(C, function(x) cbind(x, d = x[["a"]] + x[["b"]]))
或使用rowSums
C <- lapply(C, function(x) cbind(x, d = rowSums(x[1:2])))