gpt4 book ai didi

r - 将变量中的值设置为 NA,以另一个变量为条件

转载 作者:行者123 更新时间:2023-12-01 07:35:31 27 4
gpt4 key购买 nike

如果满足另一个变量的条件,我希望删除变量中的值。例如:

df$var1[df$condvar == 0] <- NA

上面的代码工作正常,但我需要为更多的变量重复这个,所以 var1以上将更改为 var2 , var3等。这总是基于相同的 condvar ,虽然对于一半的变量,条件是 df$condvar == 1 .一遍又一遍地重复这一行很麻烦,我想知道是否有更简洁的编码方式。会之一 apply函数有帮助,还是我需要创建自定义函数?

作为一个可重复的示例,我希望避免以下代码的重复性:
ex <- mtcars
ex$mpg[ex$vs == 0] <- NA
ex$disp[ex$vs == 0] <- NA
ex$drat[ex$vs == 0] <- NA
ex$cyl[ex$vs == 1] <- NA
ex$hp[ex$vs == 1] <- NA
ex$wt[ex$vs == 1] <- NA
ex


mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 NA 6 NA 110 NA 2.620 16.46 0 1 4 4
Mazda RX4 Wag NA 6 NA 110 NA 2.875 17.02 0 1 4 4
Datsun 710 22.8 NA 108.0 NA 3.85 NA 18.61 1 1 4 1
Hornet 4 Drive 21.4 NA 258.0 NA 3.08 NA 19.44 1 0 3 1
Hornet Sportabout NA 8 NA 175 NA 3.440 17.02 0 0 3 2
Valiant 18.1 NA 225.0 NA 2.76 NA 20.22 1 0 3 1
Duster 360 NA 8 NA 245 NA 3.570 15.84 0 0 3 4
etc.

如果有一行代码适用于 condvar == 0 的所有变量,我会非常高兴。另一个用于那些 condvar == 1 的变量.

最佳答案

这是一个希望不太复杂的尝试。如果您设置了 vars要循环过去,对应的values你想被选中进行索引,你可以这样做:

vars   <- c("mpg", "disp", "cyl", "hp")
values <- c(0, 0, 1, 1)

ex[vars] <- Map(function(x,y) replace(x, ex$vs == y, NA), ex[vars], vals)

# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 NA 6 NA 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag NA 6 NA 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 NA 108.0 NA 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 NA 258.0 NA 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout NA 8 NA 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 NA 225.0 NA 2.76 3.460 20.22 1 0 3 1
# ...

如果您只有两个组,您可以通过评论中提到的@HubertL 和@Phil 的一些作业来更简单地完成此操作,但使用 Map允许您考虑具有许多可能索引值的许多变量,而无需扩展超过 3 行代码。

关于r - 将变量中的值设置为 NA,以另一个变量为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40010165/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com