我调查了存储在csv文件中的结果(分类),在同一个单元格中有多个响应。我想将它拆分为单独的列(虚拟变量)
数据看起来像
response <-c(1,2,3,123)
df <-data.frame(response)
我尝试了以下代码
for(t in unique(df$response))
{df[paste("response",t,sep="")] <- ifelse(df$response==t,1,0)}
结果在这里,但它为123
创建了一个新列head(df)
response response1 response2 response3 response123
1 1 1 0 0 0
2 2 0 1 0 0
3 3 0 0 1 0
4 123 0 0 0 1
我希望数据如下所示
response response1 response2 response3
1 1 1 0 0
2 2 0 1 0
3 3 0 0 1
4 123 1 1 1
感谢您的帮助和建议:)
答案 0 :(得分:1)
我们可以做到
df1 <- cbind(df, +(sapply(1:3, grepl, x = df$response)))
colnames(df1)[-1] <- paste0("response", colnames(df1)[-1])
df1
# response response1 response2 response3
#1 1 1 0 0
#2 2 0 1 0
#3 3 0 0 1
#4 123 1 1 1