重命名是分析中的一个重要因素。我有一个如下数据集:
dat1 <- read.table(header=TRUE, text="
ID Age Align Weat
8645 15-24 A 1
6228 15-24 B 1
5830 15-24 C 3
1844 25-34 B 3
4461 35-44 C 4
2119 55-64 C 2
2115 45-54 A 1
")
dat1
ID Age Align Weat
1 8645 15-24 A 1
2 6228 15-24 B 1
3 5830 15-24 C 3
4 1844 25-34 B 3
5 4461 35-44 C 4
6 2119 55-64 C 2
7 2115 45-54 A 1
我想将column 2 to column 4
更改为二进制变量。我的选择是:
if in Age column, 15-24=1, otherwise=0
if in Align column, A=1, otherwise=0
if in Weat column, 3=1, otherwise=0
我的代码不是一个简单的解决方案(使用plyr
函数rename
)。我想要一个简单易用的代码来处理更复杂和更大的数据。
library(plyr)
dat1$Age <- revalue(dat1$Age, c("15-24"=1,"25-34"=0,"35-44"=0,"45-54"=0,"55-64"=0))
dat1$Align <- revalue(dat1$Align, c("A"=1,"B"=0,"C"=0))
dat1$Weat <- as.factor(dat1$Weat)
dat1$Weat <- revalue(dat1$Weat, c("3"=1,"1"=0,"2"=0, "4"=0))
dat1
ID Age Align Weat
1 8645 1 1 0
2 6228 1 0 0
3 5830 1 0 1
4 1844 0 0 1
5 4461 0 0 0
6 2119 0 0 0
7 2115 0 1 0
答案 0 :(得分:2)
我们可以使用逻辑运算来确定条件是否满足,然后使用as.integer
将值转换为1和0.
dat2 <- dat1 %>%
mutate(Age = as.integer(Age %in% "15-24"),
Align = as.integer(Align %in% "A"),
Weat = as.integer(Weat == 3))
dat2
# ID Age Align Weat
# 1 8645 1 1 0
# 2 6228 1 0 0
# 3 5830 1 0 1
# 4 1844 0 0 1
# 5 4461 0 0 0
# 6 2119 0 0 0
# 7 2115 0 1 0
使用+ 0L
也可以。
dat2 <- dat1 %>%
mutate(Age = Age %in% "15-24" + 0L,
Align = Align %in% "A" + 0L,
Weat = (Weat == 3) + 0L)
dat2
# ID Age Align Weat
# 1 8645 1 1 0
# 2 6228 1 0 0
# 3 5830 1 0 1
# 4 1844 0 0 1
# 5 4461 0 0 0
# 6 2119 0 0 0
# 7 2115 0 1 0