r-当满足条件时,如何添加包含特定值的列



我有一个数据帧:

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

最新更新