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