将响应(作为数字)拆分为多个列

时间:2017-09-04 17:15:51

标签: r

我调查了存储在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

感谢您的帮助和建议:)

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