满足条件时如何添加包含特定值的列?

时间:2020-10-03 21:07:08

标签: r for-loop tibble

我有一个数据框:

tibble{
x = c(1,2,3)
y = c(0,2,4)
}

我想添加一个新的变量“ z”,该变量将为:

z = c("Lower", "Equal", "Higher")

我当时正在考虑使用for循环,但是我不确定这是否是最有效/正确的方法。

2 个答案:

答案 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