[英]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.