【问题标题】:I want to all the values in the "EVENT_ID" to be displayed in the form of separate columns with respect to the "Email_ID"我希望“EVENT_ID”中的所有值都以相对于“Email_ID”的单独列的形式显示
【发布时间】:2016-10-14 13:09:46
【问题描述】:

Email Id 具有重复值,对应于存在唯一的事件 id。我想在表格中对其进行转换,以便对于每个电子邮件 ID,所有事件 ID 都应列在不同的列中

【问题讨论】:

  • 请提供一些示例数据和一些您尝试解决问题的代码。

标签: r dplyr tidyr


【解决方案1】:

这就是它在 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/

谢谢

【讨论】:

  • 谢谢,真的很有帮助。
【解决方案2】:

如果您愿意,也可以使用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>

【讨论】:

    猜你喜欢
    • 2013-12-11
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2021-05-30
    • 2011-06-16
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多