【发布时间】:2018-02-14 00:22:07
【问题描述】:
只要对应的列>0,我需要将一些数据列设置为 NA。
我可以使用 mutate 和两列的名称来执行此操作,但我想要一个范围版本,在其中我从第一列的名称创建相应列的名称
(x<-data.frame(x1=(1:4),map.x1=c(0,0,7,0),x2=c(2,2,2,2),map.x2=c(0,7,0,0)))
mutate(x, x1=ifelse(map.x1>0, NA, x1))
mutate_at(x, vars(starts_with("x")), function(v) {
m.name <- paste0("map.", deparse(substitute(v)))
ifelse(get(m.name)>0, NA, v)
)
}
我可以看到 ifelse() 不高兴,因为它希望第一个参数是一个对象,并且我已经给出了一个表达式。
我找不到方法。我什至想知道是否有某种方法可以避免在 paste0() 或 get() 中使用 function(v) 和使用 (.)
我也在考虑重塑,这样我就可以进行一次变异。这里的最佳做法是什么?
【问题讨论】:
-
函数的括号和方括号乱七八糟。