【发布时间】:2016-10-14 13:09:46
【问题描述】:
Email Id 具有重复值,对应于存在唯一的事件 id。我想在表格中对其进行转换,以便对于每个电子邮件 ID,所有事件 ID 都应列在不同的列中
【问题讨论】:
-
请提供一些示例数据和一些您尝试解决问题的代码。
Email Id 具有重复值,对应于存在唯一的事件 id。我想在表格中对其进行转换,以便对于每个电子邮件 ID,所有事件 ID 都应列在不同的列中
【问题讨论】:
这就是它在 R 中的实现方式:
我们从一个包含 2 个字段、电子邮件和事件的数据集开始:
email <- c("john.doe@mysite.com", "jane.doe@mysite.com")
event <- c("event1", "event2", "event3", "event4")
df <- as.data.frame(cbind(email, event), stringsAsFactors = F)
df
email event
1 john.doe@mysite.com event1
2 jane.doe@mysite.com event2
3 john.doe@mysite.com event3
4 jane.doe@mysite.com event4
到目前为止,我们有 2 封不同的电子邮件和 4 个事件。
使用 dcast 功能,您应该能够创建所需的数据透视表。
library(reshape2) # needed to use the dcast function
df.new <- dcast(df, email ~ event)
df.new
email event1 event2 event3 event4
1 jane.doe@mysite.com <NA> event2 <NA> event4
2 john.doe@mysite.com event1 <NA> event3 <NA>
所以第一条记录 new 包含:
df.new[1,]
email event1 event2 event3 event4
1 jane.doe@mysite.com <NA> event2 <NA> event4
第二个包含:
df.new[2,]
email event1 event2 event3 event4
2 john.doe@mysite.com event1 <NA> event3 <NA>
更多信息: https://www.r-bloggers.com/pivot-tables-in-r/
谢谢
【讨论】:
如果您愿意,也可以使用tidyr 来完成:
email <- c("john.doe@mysite.com", "jane.doe@mysite.com")
event <- c("event1", "event2", "event3", "event4")
df <- as.data.frame(cbind(email, event), stringsAsFactors = F)
library(tidyr)
df <- df %>%
spread(event, event)
df
返回
email event1 event2 event3 event4
1 jane.doe@mysite.com <NA> event2 <NA> event4
2 john.doe@mysite.com event1 <NA> event3 <NA>
【讨论】: