我有一个数据框:
tibble{
x = c(1,2,3)
y = c(0,2,4)
}
我想添加一个新的变量“ z”,该变量将为:
z = c("Lower", "Equal", "Higher")
我当时正在考虑使用for循环,但是我不确定这是否是最有效/正确的方法。
答案 0 :(得分:2)
取“ x”和“ y”的差后,可以用sign
创建数据集中的新变量,得到sign
的值,用{将其转换为factor
{1}}和对应的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)
答案 1 :(得分:1)
基本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