微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R将collect用于调查数据中的多个循环

如何解决R将collect用于调查数据中的多个循环

我正在处理一些稍显尴尬的调查数据。调查软件的输出格式为:

Respondent     contact1     contact2     question1     question2     question1     question2
   Tim           Bob          Alan           1             0             0             1

位置:

Contact1和contact2是被调查者可以在其中列出与之联系的个人的插槽。

然后为每个联系人循环以下固定问题集,每个问题都是一个新列。答案记录为简单的1或0。

我希望将这些数据重塑为更易于分析的布局:

Respondent     Contact    question1    question2
   Tim           Bob          1            0
   Tim           Alan         0            1

显然,这是简化的,实际的数据集有100个联系人,每个联系人大约有8个问题,但布局是相同的。

我认为最好的方法是结合使用collect(),express()和spread()

data %>%
  gather(key,value,-Respondent) %>%
  extract(key,c("question","contact"),"reg ex") %>%
  spread(question,value)

但是事实证明,不同的长度和多个触点很难对齐。

解决方法

"contact"列中删除数字,然后可以使用pivot_longer

names(df) <- sub('(?<=contact)\\d+','',names(df),perl = TRUE)

tidyr::pivot_longer(df,cols = -Respondent,names_to = '.value')

#  Respondent contact question1 question2
#  <chr>      <chr>       <int>     <int>
#1 Tim        Bob             1         0
#2 Tim        Alan            0         1

数据

df <- structure(list(Respondent = "Tim",contact1 = "Bob",contact2 = "Alan",question1 = 1L,question2 = 0L,question1 = 0L,question2 = 1L),class = "data.frame",row.names = c(NA,-1L))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。