r - 根据 R 中的重复值重构数据
问题描述
现在,我尝试重构我的数据(它是关于调查中联系人的响应能力),其结构如下:
df_test <- data.frame(
Residence=c(rep("Berlin",10),rep("Frankfurt",10),rep("Munich",10)),
Response=c(rep(TRUE,14),rep(FALSE,16)),
ID=c(rep(1:15,each=2)),
Contact = c(rep(c("Phone","Mail","In_Person","Phone","eMail","Phone"))),
Date = sample(seq(as.Date('2000/01/01'), as.Date('2001/01/01'), by="day"), 30)
)
df_test <- df_test[order(df_test$ID,df_test$Date),]
在生成的数据框中,每一行代表一个联系事件,通常,所有人(由 ID 标记)都已通过不同方式多次联系:
#first 4 lines of dataframe:
Residence Response ID Contact Date
2 Berlin TRUE 1 Mail 2000-07-25
1 Berlin TRUE 1 Phone 2000-09-25
3 Berlin TRUE 2 In_Person 2000-02-06
4 Berlin TRUE 2 Phone 2000-10-01
为了获得一个很好的概述,重点关注例如情节的联系人,我想创建一个新的数据框,其中每一行代表一个联系人,固定值只出现一次(例如 ID、居住地、响应),而特定于联系人值(联系人,日期)列在每一行中,如下所示:
#restructured lines in new dataframe from first 4 lines of original dataframe:
Residence Response ID Contact Date Contact.1 Date.1
1 Berlin TRUE 1 Mail 2000-07-25 Phone 2000-09-25
2 Berlin TRUE 2 In_Person 2000-02-06 Phone 2000-10-01
通过按日期进行初始排序,我希望还能按时间顺序在每一行中获得联系尝试。
虽然我没有任何接近运行的代码,但我尝试至少获得一个带有空列的数据框,并用提取的 ID 填充它,没有重复:
for (i in df_test[,"ID"]){
if (df_test[i,"ID"] != df_test [i-1,"ID"]){
df_test_restructured<-append(df_test_restructured,df_test[i,"ID"])
}
}
经过多次徒劳无功的尝试,我认为应该有一些我不知道的现有且更有效的策略或功能。有什么建议么?提前感谢<3
编辑:理想情况下,每一行都会按顺序列出联系尝试,因为人们也曾多次使用相同的媒体联系过。我想提取信息,例如人们在收到第一封电子邮件后大多在收到第一封提醒电子邮件后做出了回应
解决方案
你可以开始做:
> df_test %>%
+ pivot_wider(names_from = Contact,values_from=Date)
# A tibble: 15 x 7
Residence Response ID Phone Mail In_Person eMail
<fct> <lgl> <int> <date> <date> <date> <date>
1 Berlin TRUE 1 2000-01-20 2000-02-18 NA NA
2 Berlin TRUE 2 2000-07-24 NA 2000-03-19 NA
实际上,使用原始 df 绘图确实可行。