Let var1 = c(1,0,1,0,0,1)
var2 = c(0,0,1,1,1,0)
var3 = c(0,1,1,0,0,1)
var4 = c(1,1,0,1,0,0)
如果var1=0,那么var2、var3和var4也必须为0。如何在R中重新编码这些变量?
从@slava kohut这样的数据帧开始,您甚至可以在一行中做得更简单:
df[df$var1 ==0,] <- 0
你会得到:
> df
var1 var2 var3 var4
1 1 0 0 1
2 0 0 0 0
3 1 1 1 0
4 0 0 0 0
5 0 0 0 0
6 1 0 1 0
另一种方法可以是将var1
与其余变量相乘。因此,所有与0相乘的值都会自动变为0。
df[-1] <- df$var1 * df[-1]
df
# var1 var2 var3 var4
#1 1 0 0 1
#2 0 0 0 0
#3 1 1 1 0
#4 0 0 0 0
#5 0 0 0 0
#6 1 0 1 0
数据
var1 = c(1,0,1,0,0,1)
var2 = c(0,0,1,1,1,0)
var3 = c(0,1,1,0,0,1)
var4 = c(1,1,0,1,0,0)
df <- data.frame(var1, var2, var3, var4)
在基本R中,您可以使用ifelse
进行以下操作:
df <- data.frame(var1 = c(1,0,1,0,0,1),
var2 = c(0,0,1,1,1,0),
var3 = c(0,1,1,0,0,1),
var4 = c(1,1,0,1,0,0))
df$var2 <- ifelse(df$var1 == 0, 0, df$var2)
df$var3 <- ifelse(df$var1 == 0, 0, df$var3)
df$var4 <- ifelse(df$var1 == 0, 0, df$var4)
如果你想使用dplyr
,那么你应该在mutate
:中使用if_else
df <- df %>% mutate(var2 = if_else(var1 == 0, 0, var2),
var3 = if_else(var1 == 0, 0, var3),
var4 = if_else(var1 == 0, 0, var4))
或使用mutate_at
:的简单一行
df <- df %>% mutate_at(c('var2', 'var3', 'var4'), ~ if_else(var1 == 0, 0, .x))