根据另一个列值修改列值

时间:2019-01-25 11:59:55

标签: r dplyr apply tidyverse

这给我带来了麻烦,我正在使用dplyr,并且我想根据CP的值更改每个Week(W1到W3)的值:如果

      CP             W1              W2              W3             W4
   <dbl>           <dbl>           <dbl>          <dbl>           <dbl>
 1    50               0              60              0               0
 4    10               0               0              0               0
 5    50              20              20             21              50
 6    10               5               0              0              21
 8    10               0              31              0               0

所需的输出应为以下内容:

     CP             W1              W2              W3             W4 
    <dbl>           <dbl>           <dbl>          <dbl>           <dbl>
1    50               0              60              0               0
4    10               0               0              0               0
5    50               0               0              0              50
6    10               0               0              0              21
8    10               0              31              0               0

您对如何使用dplyr或其他方法解决此问题有任何想法吗? 谢谢!

1 个答案:

答案 0 :(得分:4)

您可以申请mutate_at

library(dplyr)

df %>%
  mutate_at(vars(starts_with("W")), funs(ifelse(. < CP, 0, .)))

输出:

  CP W1 W2 W3 W4
1 50  0 60  0  0
2 10  0  0  0  0
3 50  0  0  0 50
4 10  0  0  0 21
5 10  0 31  0  0

请注意,starts_with将匹配任何以W开头的列名。

如果这是一个问题(例如,如果您有其他不想使用该模式的列),则也可以将matches与一个仅考虑那些{{1}的正则表达式一起使用},后跟数字:

W