R中范畴变量的重新编码


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))

最新更新