#r #for-loop #tibble
#r #for-цикл #tibble
Вопрос:
У меня есть фрейм данных:
tibble{
x = c(1,2,3)
y = c(0,2,4)
}
Я хочу добавить НОВУЮ переменную «z», которая будет:
z = c("Lower", "Equal", "Higher")
Я думал об использовании цикла for, но я не уверен, что это самый эффективный / правильный способ.
Ответ №1:
Новая переменная в наборе данных может быть создана с sign
помощью после взятия разности ‘x’ и ‘y’, получения sign
значений, преобразования их в factor
с levels
помощью и соответствующего labels
указанного
library(dplyr)
df1 %>%
mutate(z = factor(sign(x - y), levels = c(-1, 0, 1),
c('Lower', "Equal", 'Higher')))
Или вариант с case_when
df1 %>%
mutate(tmp = x - y,
z = case_when(tmp >0 ~ 'Higher', tmp < 0 ~ 'Lower',
TRUE ~ 'Equal'), tmp = NULL)
данные
df1 <- tibble(
x = c(1,2,3),
y = c(0,2,4))
Ответ №2:
Базовый параметр R
within(df,z <- c("Lower", "Equal", "Higher")[sign(y-x) 2])
что дает
# A tibble: 3 x 3
x y z
<dbl> <dbl> <chr>
1 1 0 Lower
2 2 2 Equal
3 3 4 Higher