将函数应用于数据框的列(列是列表)

时间:2016-12-07 11:24:29

标签: r list dataframe apply

我有一个包含2列的数据框,第一列是ID号,第二列是数字列表。我已经定义了一个函数,它总结了列表并添加2.我想要做的是在不使用for循环的情况下对所有行进行计算。我尝试过使用apply,但我无法使用...

以下是代码:

测试数据框:

d1 <- c(1,2,3,4,5)
d2 <- c(4,6,8)
d3 <- c(5,10)

df1 <- data.frame(cbind(1, I(list(d1))))
df2 <- data.frame(cbind(2, I(list(d2))))
df3 <- data.frame(cbind(3, I(list(d3))))
df <- rbind(df1, df2, df3)

定义的函数sum2:

sum2 <- function(a)
{
  sum(unlist(a)) + 2
}

如何使用apply并将第三列添加到包含计算值的df?

谢谢!

2 个答案:

答案 0 :(得分:5)

以下适用于您的示例

sapply(df[,2], function(x) sum(x)+2)

答案 1 :(得分:3)

我们可以使用sapply

df$NewCol <- sapply(df$X2, function(x) sum(x) + 2)

或使用OP的功能,但不需要unlist

sapply(df$X2, sum2)