【问题标题】:Add calculated columns to dataframe for each value in a vector为向量中的每个值将计算列添加到数据框中
【发布时间】:2020-03-04 21:50:49
【问题描述】:

我有一个向量 testlen <- c(4, 5, 6) 和标准 iris 数据集。

我想向iris 添加一列,用于测试testlen 中每个元素的Sepal.Length。如果Sepal.Lengthtestlen 中的元素长,则进行如下操作。

我只知道如何使用 mutate 来做到这一点:

iris <- iris %>% mutate(ratio1 = if_else(Sepal.Length> testlen[1], Petal.Length/Petal.Width,0)) %>%
                    mutate(ratio2 = if_else(Sepal.Length> testlen[2], Petal.Length/Petal.Width,0)) %>%
                    mutate(ratio3 = if_else(Sepal.Length> testlen[3], Petal.Length/Petal.Width,0))

似乎有一些方法可以使用 apply() 函数,但我不确定如何。

(我不关心新计算列的名称。什么都可以。)

【问题讨论】:

  • 总是一样的操作吗? testlen 的哪个元素更短?
  • 始终执行相同的操作,但针对不同的 Sepal.Length 值进行操作,这就是 testlen 向量的用途。

标签: r dplyr apply


【解决方案1】:
cbind(iris, with(iris, setNames(lapply(testlen, function(x){
    (Sepal.Length > x) * Petal.Length/Petal.Width
}), seq_along(testlen))))

calc = with(iris, data.frame(sapply(testlen, "<", Sepal.Length) * Petal.Length/Petal.Width))
cbind(iris, calc)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多