将向量中每个值的计算列添加到数据框

时间:2020-03-04 21:50:49

标签: r dplyr apply

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

我想在iris中添加一列,以测试Sepal.Length中每个元素的testlen。如果Sepal.Length长于testlen中的元素,请执行以下操作。

我只知道如何使用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()函数,但是我不确定如何做。

(我不在乎新计算列的名称。没关系。)

1 个答案:

答案 0 :(得分:3)

cbind(iris, with(iris, setNames(lapply(testlen, function(x){
    (Sepal.Length > x) * Petal.Length/Petal.Width
}), seq_along(testlen))))

OR

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