如何解决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 举报,一经查实,本站将立刻删除。