Добавить вычисляемые столбцы в dataframe для каждого значения в векторе - PullRequest
1 голос
/ 05 марта 2020

У меня есть вектор 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 Ответ

3 голосов
/ 05 марта 2020
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)
...