用户在github中问了一个问题https://github.com/tidyverse/tidyr/issues/41,我发现Hadley认为这是一个错误。但是,没有给出解决方案。当我的数据框上有重复的标识符时,我仍然遇到这个问题
structure(list(key = c("a", "b", "c", "d", "c"), value = c(1,
2, 3, 2, 4)), .Names = c("key", "value"), row.names = c(NA, -5L
), class = c("tbl_df", "tbl", "data.frame"))
现在当我使用dplyr的扩展时,我仍然有一个带有NA的稀疏矩阵,因为我碰巧有重复的标识符`在这里输入代码
dftest %>% spread(key,value)
Error: Duplicate identifiers for rows (3, 5)
所以我添加了一个ID行
> dftest$id<-seq(1,5)
> dftest %>% spread(key,value)
# A tibble: 5 x 5
id a b c d
<int> <dbl> <dbl> <dbl> <dbl>
1 1 1. NA NA NA
2 2 NA 2. NA NA
3 3 NA NA 3. NA
4 4 NA NA NA 2.
5 5 NA NA 4. NA
但对角数据框不是我想要的。我想要一个传播输出的顶行在行1中读取1,2,3,2然后colum c中的值将落在第2行的下面。也就是说,我没有用具有NA的对角矩阵。我错过了什么吗?我谦虚地问。
答案 0 :(得分:2)
您已经关闭以获得正确的输出。
使用原始输入中的dftest
。
方法:
dftest %>% group_by(key) %>% mutate(id = 1:length(key)) %>% spread(key, value)
输出:
# A tibble: 2 x 5
id a b c d
<int> <dbl> <dbl> <dbl> <dbl>
1 1 1. 2. 3. 2.
2 2 NA NA 4. NA