将一列从分类转换为二进制,保留其余部分
Transform one column from categoric to binary, keep the rest
我有一个中型大型数据框,我想将其中的一个类别列转换为二进制列,每个类别一个。
同时,我想保留数据框中的其余列。
实现此目标的最简单方法是什么?
这是我想要做的一个例子:
d<-data.frame(ID=c("a","b","c","d"), Gender=c("male", "male", "female","female"), Age =c(23,45,18,11))
ID Gender Age
1 a male 23
2 b male 45
3 c female 18
4 d female 11
之后应该看起来像 d2,这样 ID 和 Age 列仍然存在且未被修改:
d2<-data.frame(ID=c("a","b","c","d"), Gender.male=c(1, 1, 0, 0), Gender.female=c(0,0,1,1), Age =c(23,45,18,11))
ID Gender.male Gender.female Age
1 a 1 0 23
2 b 1 0 45
3 c 0 1 18
4 d 0 1 11
我们可以使用spread
library(tidyvesre)
d %>%
mutate(n = 1) %>%
spread(Gender, n, fill = 0)
我们可以使用 dummies
包。
library(dummies)
d2 <- dummy("Gender", d)
d3 <- cbind(d, d2)
d3$Gender <- NULL
d3
# ID Age Genderfemale Gendermale
# 1 a 23 0 1
# 2 b 45 0 1
# 3 c 18 1 0
# 4 d 11 1 0
或使用 dcast
来自 reshape2
library(reshape2)
dcast(d, ID + Age ~ Gender, length)
# ID Age female male
#1 a 23 0 1
#2 b 45 0 1
#3 c 18 1 0
#4 d 11 1 0
我有一个中型大型数据框,我想将其中的一个类别列转换为二进制列,每个类别一个。
同时,我想保留数据框中的其余列。
实现此目标的最简单方法是什么?
这是我想要做的一个例子:
d<-data.frame(ID=c("a","b","c","d"), Gender=c("male", "male", "female","female"), Age =c(23,45,18,11))
ID Gender Age
1 a male 23
2 b male 45
3 c female 18
4 d female 11
之后应该看起来像 d2,这样 ID 和 Age 列仍然存在且未被修改:
d2<-data.frame(ID=c("a","b","c","d"), Gender.male=c(1, 1, 0, 0), Gender.female=c(0,0,1,1), Age =c(23,45,18,11))
ID Gender.male Gender.female Age
1 a 1 0 23
2 b 1 0 45
3 c 0 1 18
4 d 0 1 11
我们可以使用spread
library(tidyvesre)
d %>%
mutate(n = 1) %>%
spread(Gender, n, fill = 0)
我们可以使用 dummies
包。
library(dummies)
d2 <- dummy("Gender", d)
d3 <- cbind(d, d2)
d3$Gender <- NULL
d3
# ID Age Genderfemale Gendermale
# 1 a 23 0 1
# 2 b 45 0 1
# 3 c 18 1 0
# 4 d 11 1 0
或使用 dcast
来自 reshape2
library(reshape2)
dcast(d, ID + Age ~ Gender, length)
# ID Age female male
#1 a 23 0 1
#2 b 45 0 1
#3 c 18 1 0
#4 d 11 1 0