【发布时间】:2016-09-01 14:54:28
【问题描述】:
鉴于此数据:
x <- c(1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4)
y <- c('Name', 'Street', 'Gender', 'Name', 'Street', 'Name', 'Street', 'Street', 'Dateofbirth', 'Gender','Name')
z <- c('Jasper', 'Broadway', 'Male', 'Alice', 'Narrowstreet', 'Peter', 'Neverland', 'Treasureisland', '1841', 'Male','Martin')
k <- data.frame(id = x, key = y, value = z)
我想创建一个干净的 4 列表,其中包含键作为标题(即姓名、街道、性别和出生日期)。这里的问题是关键的“街道”对于彼得来说是双倍的。我试过使用传播(tidyr),但我没有设法让它工作。
k <- k %>% group_by(id) %>%
mutate(index = row_number()) %>%
spread(key, value)
我也试了一下:
k <- k %>% group_by(id) %>%
mutate(index = row_number()) %>%
spread(id, value)
结果不是我所期望的,这两个表都很难使用。有什么想法吗?
【问题讨论】:
-
不清楚你想用这些加倍的值做什么......一个选项(使用reshape2而不是tidyr)看起来像
dcast(k, id ~ key, fun=toString) -
好点。理想情况下,我想保留它们并将它们插入单独的列中。作为第二好的选择,我可以保留第一个。如果你觉得问题不够清楚,我会修改。
-
是的,我认为编辑它会很好。在我看来,列出这两个选项很好。
-
刚刚尝试过,它可以工作!您可以将其发布为答案。干杯!
-
当然。顺便说一句,除了编辑您的问题以包含您上次评论中的信息之外,我认为您应该改进标题(“传播重复值”之类的?)