如何根据不同列中的值替换数据框中的值

时间:2018-09-24 00:23:46

标签: r

我正在寻找一种解决我的问题的简单方法(肯定存在)。

我有以下示例数据库:

a    b    c    comp
10   20   30   25
15   30   40   20

现在,我需要找到一个代码,该代码将遍历列abc,并将替换任何大于其值的单元格。该特定行的comp列。

因此,在这种情况下,结果将为:

a    b    c    comp
10   20   NA   25
15   NA   NA   20

有没有解决嵌套问题的智能解决方案?

2 个答案:

答案 0 :(得分:2)

这应该归结为单个向量化的比较,因为您要对n行和n长度向量进行操作:

sel <- c("a","b","c")
dat[sel][dat[sel] > dat$comp] <- NA
dat
#   a  b  c comp
#1 10 20 NA   25
#2 15 NA NA   20

答案 1 :(得分:0)

使用data.table可以尝试

library(data.table)
setDT(df)[,lapply(.SD, function(x) ifelse(x > comp, NA, x))]