使用lapply创建新的dataframe列,该lapply是特定列的总和

时间:2017-11-28 09:44:19

标签: r

创建数据框:

res <- data.frame("ID" = c(1,2), "str" = c(21,15), "c" = c("a1","a2"), "s" = c("s1","s2"), "c1" = c(2,4), "c2" = c(6,8))

值:

  ID str  c  s c1 c2
1  1  21 a1 s1  2  6
2  2  15 a2 s2  4  8

我尝试使用值8和12创建新列total,这些列是c1的总数,c2用于ID为1,2的行

这里尝试使用lapply来创建列:

lapply(res , sum(c('c1' , 'c2')))

但返回错误:

Error in sum(c("c1", "c2")) : invalid 'type' (character) of argument

如何对数据框中的特定列求和?

更新:

要了解应用函数,我尝试仅使用lapply实现。

1 个答案:

答案 0 :(得分:1)

对于data.frames,通常更容易使用applylapply适用于矢量。因此,要使用它,您需要首先使用t转换data.frame,这会产生一个矩阵,您可以将其更改为data.frame。因为`lapply'创建了一个列表,你可以使用unlist来获取一个可以从一开始就存储到data.frame中的向量。

res.t = as.data.frame(t(res[,c("c1","c2")]))
res$total = unlist(lapply(res.t, sum))

希望能帮助您理解lapply