首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从多答案调查问题中创建多个列(虚拟)

从多答案调查问题中创建多个列(虚拟)
EN

Stack Overflow用户
提问于 2020-08-26 20:23:09
回答 4查看 51关注 0票数 0

如何从多个答案列中创建多个(虚拟)列?我想做这件事完全自动,这样它就可以自动检测答案。如下所示的函数: create_multiple_columns(df$posessions,sep =“")

为了便于说明,它会自动创建“帽子”、“桌子”和“笔”虚拟对象。

代码语言:javascript
运行
复制
df = data.frame(person = c(1, 2, 3, 4), 
                posessions = c("hat table pen", "hat", "table", "hat pen"), 
                hat = c(1,1,0,1),
                table = c(1,0,1,0),
                pen = c(1,0,0,1)
                )
EN

回答 4

Stack Overflow用户

发布于 2020-08-26 20:33:59

我会推荐一种tidyverse方法,通过重塑数据,你可以得到更接近你想要的东西:

代码语言:javascript
运行
复制
library(tidyverse)
#Data
df2 <- structure(list(person = c(1, 2, 3, 4), posessions = structure(c(3L, 
1L, 4L, 2L), .Label = c("hat", "hat pen", "hat table pen", "table"
), class = "factor")), class = "data.frame", row.names = c(NA, 
-4L))

代码:

代码语言:javascript
运行
复制
df2 %>% separate(posessions,into = c('v1','v2','v3'),sep = ' ') %>%
  pivot_longer(cols = -1) %>% filter(!is.na(value)) %>%
  group_by(person,value) %>% summarise(N=n()) %>%
  pivot_wider(names_from = value, values_from=N) %>%
  replace(is.na(.),0)

输出:

代码语言:javascript
运行
复制
# A tibble: 4 x 4
# Groups:   person [4]
  person   hat   pen table
   <dbl> <int> <int> <int>
1      1     1     1     1
2      2     1     0     0
3      3     0     0     1
4      4     1     1     0
票数 2
EN

Stack Overflow用户

发布于 2020-08-26 20:36:52

使用data.table

代码语言:javascript
运行
复制
df = data.table(
  person = c(1, 2, 3, 4), 
  posessions = c("hat table pen", "hat", "table", "hat pen")
)

all_words <- df$posessions %>% str_split(" ") %>% unlist() %>% unique()
df[, (all_words) := map(all_words, ~str_detect(posessions, .x) * 1L)]
票数 1
EN

Stack Overflow用户

发布于 2020-08-26 20:39:54

您可以使用strsplit拆分字符串,获取unique单词,并使用%in%进行测试。

代码语言:javascript
运行
复制
x <- strsplit(df$posessions, " ")
y <- unique(unlist(x))
z <- +(do.call(rbind, lapply(x, "%in%", x=y)))
colnames(z) <- y
cbind(df[1:2], z)
#  person    posessions hat table pen
#1      1 hat table pen   1     1   1
#2      2           hat   1     0   0
#3      3         table   0     1   0
#4      4       hat pen   1     0   1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63597594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档