鉴于此数据:
_GetAll()
我想创建一个干净的4列表,其中包含密钥作为标题(即名称,街道,性别和出生日期)。这里的问题是彼得的关键“街道”是双倍的。我曾尝试使用spread(tidyr),但我还没有设法让它发挥作用。
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)
我也试了一下:
k <- k %>% group_by(id) %>%
mutate(index = row_number()) %>%
spread(key, value)
结果不是我所期望的,两个表都很难处理。有什么想法吗?
答案 0 :(得分:2)
不知道这是否正是您所寻找的,但如果您只想保留第一个,则group_by(id,key)
和summarise
value
可以使用{{1} }。然后,按first
和id
重新分组:
spread
要将doubled值放在不同的列中,请使用library(dplyr)
library(tidyr)
k <- k %>% group_by(id, key) %>% summarise(value=first(value)) %>% group_by(id) %>% spread(key,value)
##Source: local data frame [4 x 5]
##Groups: id [4]
##
## id Dateofbirth Gender Name Street
##* <dbl> <fctr> <fctr> <fctr> <fctr>
##1 1 NA Male Jasper Broadway
##2 2 NA NA Alice Narrowstreet
##3 3 1841 Male Peter Neverland
##4 4 NA NA Martin NA
创建唯一键:
make.names
或者,您可以k <- k %>% group_by(id) %>% mutate(key=make.names(key,unique=TRUE)) %>% group_by(id) %>% spread(key,value)
##Source: local data frame [4 x 6]
##Groups: id [4]
##
## id Dateofbirth Gender Name Street Street.1
##* <dbl> <fctr> <fctr> <fctr> <fctr> <fctr>
##1 1 NA Male Jasper Broadway NA
##2 2 NA NA Alice Narrowstreet NA
##3 3 1841 Male Peter Neverland Treasureisland
##4 4 NA NA Martin NA NA
和group_by(id,key)
summarise
使用value
或toString
paste
来平展加倍的值:
collapse