使用mapply根据其他列中的值设置值

时间:2019-03-14 10:35:22

标签: r mapply

基于我的previous question,我需要正确使用mapply函数的帮助。

x <- data.frame(a = seq(1,3), b = seq(2,4), c = seq(3,5), d = seq(4,6), b2 = seq(5,7), c2 = seq(6,8), d2 = seq(7,9))

# a b c d b2 c2 d2
# 1 2 3 4 5  6  7
# 2 3 4 5 6  7  8
# 3 4 5 6 7  8  9

我的目标是查看b2到d2列,并根据它们的值分别更改b到d列中的值。我可以很容易地为单列做到这一点:

x[which(x$b2 == 7),][b] <- NA_real_

我的问题是我希望将此方法应用于所有列,但我不知道如何转换此单列公式以在多个列上使用。我尝试过:

onez <- c(2:4)
twoz <- c(5:7)
f <- function(df, ones, twos) {
  df[which(df[,twos] == 7),][ones] <- NA_real_
}

mapply(f, df = x, ones = onez, twos = twoz)

但是我收到错误消息(尺寸不正确等),我发现我的功能很混乱,但是我不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

一种方法是告诉它:

  • 获取具有第5、6、7列的数据帧的子集:System.Reactive

  • 从该子集中检查哪些值满足您的条件:x[5:7]

  • 用NA替换这些值:x[5:7] == 7

这给出了以下内容,

... <- NA

如果您希望在x[5:7][x[5:7] == 7] <- NA x # a b c d b2 c2 d2 #1 1 2 3 4 5 6 NA #2 2 3 4 5 6 NA 8 #3 3 4 5 6 NA 8 9 更换NA,则可以这样做,

x[2:4]