我正在尝试使用R重塑活动的注册表。
当前,每列代表一个时间段(例如:9-11AM,11 AM-1PM等),每列中的每一行都是联系人电子邮件。一些联系人只注册了一段时间,而另一些则注册了多个:
9-11 11-1 1-3 3-5
xxx@email.com zzz@email.com zzz@email.com xxx@email.com
yyy@email.com yyy@email.com yyy@email.com yyy@email.com
我调整了数据的形状,使每封电子邮件一次都与一个时隙配对:
xxx@email.com "9-11"
yyy@email.com "9-11"
zzz@email.com "11-1"
yyy@email.com "11-1"
zzz@email.com "1-3"
yyy@email.com "1-3"
xxx@email.com "3-5"
yyy@email.com "3-5"
为了为邮件合并发送每个作业做准备,我想重塑数据,以便每个电子邮件观察都与计划它们的所有作业配对(例如:1、2、3或全部)放在data.frame对象中:
xxx@email.com "9-11" , "3-5
yyy@email.com "9-11" , "11-1" , "1-3", "3-5"
zzz@email.com "11-1" , "1-3"
我当前的代码是:
assignments_final <- sapply(split(assignments[-1], assignments[1]), function(X) unname(unlist(X)))
# combine all time slots assigned to the same person into one list
df <- data.frame()
# create data frame to add each list object
for (i in 1:length(assignments_final)) {
df <- rbind(df, assignments_final[[i]])
}
# for each observation, add contact and all assignments to a new row
但是,这段代码给了我一个错误:“ In [<-.factor
(*tmp*
,ri,value =” 9-11“):
无效的因子水平,生成了NA”
返回的数据帧仅包含是否每个人都被分配给第一人的一个班次(例如:如果第一人被分配给9-11和11-1的班次,则有两列;如果此人签了名,则每一列都包含该班次;否则,则为NA。
我该如何解决这个问题,以便有n个不同的列,对于每个未分配此人的班次,每个班次都标记为NA,或者所有班次都列在一栏中?
谢谢。
答案 0 :(得分:0)
您可以使用aggregate
> aggregate(V2~V1, data=df, FUN=paste0)
V1 V2
1 xxx@email.com 9-11, 3-5
2 yyy@email.com 9-11, 11-1, 1-3, 3-5
3 zzz@email.com 11-1, 1-3
数据:
df <- read.table(text="xxx@email.com 9-11
yyy@email.com 9-11
zzz@email.com 11-1
yyy@email.com 11-1
zzz@email.com 1-3
yyy@email.com 1-3
xxx@email.com 3-5
yyy@email.com 3-5", header=FALSE)