简体   繁体   English

在 R 中重新编码分类变量

[英]Recoding categorical variable in 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)

If var1 = 0 then var2, var3 and var4 must also be 0. How to recode these variables in R?如果 var1 = 0 则 var2、var3 和 var4 也必须为 0。如何在 R 中重新编码这些变量?

Starting with a dataframe like @slava-kohut proposes it, you can even do it simpler in one line:从像@slava-kohut 建议的 dataframe 开始,您甚至可以在一行中更简单地完成它:

df[df$var1 ==0,] <- 0

And you get:你得到:

> 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

Another approach could be to multiply var1 with rest of the variables.另一种方法可能是将var1与变量的 rest 相乘。 So all the values multiplied with 0 turn to 0 automatically.所以所有乘以 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

data数据

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)

In base R, you can use ifelse for this:在基础 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)

If you want to use dplyr , then you should use if_else inside mutate :如果你想使用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))

or a simple one-liner using mutate_at :或使用mutate_at的简单单线:

df <- df %>% mutate_at(c('var2', 'var3', 'var4'), ~ if_else(var1 == 0, 0, .x))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM