使用 mapply 根据其他列中的值设置值
Using mapply to set values based on values in other columns
根据我的 ,我需要帮助才能正确使用 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)
但是我收到错误消息(不正确的尺寸等),我发现我的函数很乱,但我不知道如何修复它。
一种方法是告诉它:
获取数据框第5、6、7列的子集:x[5:7]
从该子集中检查哪些值满足您的条件:x[5:7] == 7
用 NA 替换这些值:... <- 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
如果你想在 x[2:4]
处替换 NA,那么你可以这样做,
x[2:4][x[5:7] == 7] <- NA
x
# a b c d b2 c2 d2
#1 1 2 3 NA 5 6 7
#2 2 3 NA 5 6 7 8
#3 3 NA 5 6 7 8 9
根据我的 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)
但是我收到错误消息(不正确的尺寸等),我发现我的函数很乱,但我不知道如何修复它。
一种方法是告诉它:
获取数据框第5、6、7列的子集:
x[5:7]
从该子集中检查哪些值满足您的条件:
x[5:7] == 7
用 NA 替换这些值:
... <- 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
如果你想在 x[2:4]
处替换 NA,那么你可以这样做,
x[2:4][x[5:7] == 7] <- NA
x
# a b c d b2 c2 d2
#1 1 2 3 NA 5 6 7
#2 2 3 NA 5 6 7 8
#3 3 NA 5 6 7 8 9