前段时间,我问了一个关于从mutually exclusive dummy variables创建分类变量的问题。现在,事实证明我想做相反的事情。
如何从单个分类变量(time
)中创建长形数据集中的虚拟变量?例如下面的数据框......
id time
1 1
1 2
1 3
1 4
会变成......
id time time_dummy_1 time_dummy_2 time_dummy_3 time_dummy_4
1 1 1 0 0 0
1 2 0 1 0 0
1 3 0 0 1 0
1 4 0 0 0 1
我确定这是微不足道的(如果这个问题是重复的,请告诉我 - 我不确定是否会这样,但如果是这样的话会很乐意删除)。谢谢!
答案 0 :(得分:3)
您可以试用dummies
库。
# Creating the data frame
# id <- c(1,1,1,1)
# time <- c(1,2,3,4)
# data <- data.frame(id, time)
install.packages("dummies")
library(dummies)
data <- cbind(data, dummy(data$time))
id time data1 data2 data3 data4
1 1 1 0 0 0
1 2 0 1 0 0
1 3 0 0 1 0
1 4 0 0 0 1
此外,您可以重命名新添加的虚拟变量标题以满足您的需求
# Rename column headers
colnames(data)[colnames(data)=="data1"] <- "time_dummy_1"
colnames(data)[colnames(data)=="data2"] <- "time_dummy_2"
colnames(data)[colnames(data)=="data3"] <- "time_dummy_3"
colnames(data)[colnames(data)=="data4"] <- "time_dummy_4"
id time time_dummy_1 time_dummy_2 time_dummy_3 time_dummy_4
1 1 1 0 0 0
1 2 0 1 0 0
1 3 0 0 1 0
1 4 0 0 0 1
希望这有帮助。
答案 1 :(得分:1)
如果您的数据是
id <- c(1,1,1,1)
time <- c(1,2,3,4)
df <- data.frame(id,time)
你可以尝试
time <- as.character(time)
unique.time <- as.character(unique(df$time))
# Create a dichotomous dummy-variable for each time
x <- sapply(unique.time, function(x)as.numeric(df$time == x))
或
time.f = factor(time)
dummies = model.matrix(~time.f)