在dplyr中有条件地改变列

时间:2017-03-19 15:10:17

标签: r dplyr

使用df如下所示,使用dplyr我需要有条件地改变字段val1,val2,val3。

> df <- data.frame(
  id = c(1,2), 
  loc=c("loc1", "loc2"), 
  val1=c(80,64), val2=c(240,32768), val3=c(32768, 64)
)
> df
  id  loc val1  val2  val3
1  1 loc1   80   240 32768
2  2 loc2   64 32768    64

如果值为&gt;,我需要将val1, val2, val3中的值设置为NA 1000

df %>%
 mutuate_at(vars(starts_with("v")), <what goes here>)

2 个答案:

答案 0 :(得分:3)

mutate_at

需要replace
df %>%
    mutate_at(vars(starts_with("v")), funs(replace(., .>1000, NA)))
#    id  loc val1 val2 val3
#1  1 loc1   80  240   NA
#2  2 loc2   64   NA   64

答案 1 :(得分:1)

您的数据采用不整齐的格式。在变异之前用gather整理它:

library(tidyverse)
 df %>% 
  gather("key", "val", val1, val2, val3) %>%
  mutate(val = ifelse(val > 1000, NA, val)) 

如果您希望将数据帧恢复为原始的,不整洁的格式,则可以使用spread

df %>%
  spread(key, val)