【问题标题】:Apply function to column of data frame (column is a list)将函数应用于数据框的列(列是列表)
【发布时间】:2017-04-22 07:45:15
【问题描述】:

我有一个包含 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?

谢谢!

【问题讨论】:

  • 为什么你更喜欢sapply而不是循环?它们都是一个循环。除非你想要更简洁的语法?
  • 我认为我可以更有效地做到这一点......有没有更好的方法来做到这一点?
  • 目前想不出一个,抱歉。如果X2 包含诸如"4, 6, 8" 之类的字符串而不是列表,您可以轻松地对其进行矢量化,但我不确定如何对您的特定格式进行矢量化。

标签: r list dataframe apply


【解决方案1】:

我们可以使用sapply

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

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

sapply(df$X2, sum2)

【讨论】:

    【解决方案2】:

    以下适用于您的示例

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

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      • 2019-06-01
      相关资源
      最近更新 更多