Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用具有重复标识符的排列可以提供具有NAs的稀疏矩阵_R_Dplyr_Tidyverse_Spread - Fatal编程技术网

R 使用具有重复标识符的排列可以提供具有NAs的稀疏矩阵

R 使用具有重复标识符的排列可以提供具有NAs的稀疏矩阵,r,dplyr,tidyverse,spread,R,Dplyr,Tidyverse,Spread,一个用户在github中问了一个问题,我看到Hadley将其识别为一个bug。然而,没有给出解决办法。当我的数据帧上有重复的标识符时,我仍然会遇到这个问题 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"))

一个用户在github中问了一个问题,我看到Hadley将其识别为一个bug。然而,没有给出解决办法。当我的数据帧上有重复的标识符时,我仍然会遇到这个问题

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的扩展时,我仍然有一个带有NAs的稀疏矩阵,因为我碰巧有重复的标识符“在这里输入代码”

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 
>dftest$id dftest%>%排列(键,值)
#一个tibble:5x5
id a b c d
1     1    1.   娜娜娜
2钠2。娜娜
3钠钠钠3。NA
4钠2。
5钠4。NA

但对角线数据帧不是我想要的。我想要一个,其中spread输出的第一行读取第1行中的1,2,3,2。然后,列c中的值将正好位于第2行的下方。也就是说,我不使用带有NAs的对角矩阵。我错过什么了吗?我谦虚地问。

你很快就能得到正确的结果了

使用原始输入的
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
#一个tible:2 x 5
id a b c d
1     1    1.    2.3.2.
2娜娜4。NA

您很快就能获得正确的输出

使用原始输入的
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
#一个tible:2 x 5
id a b c d
1     1    1.    2.3.2.
2娜娜4。NA

您需要创建一个序列列,然后
排列
您需要创建一个序列列,然后
排列
@PanchoMulongeni乐意提供帮助。“如果我的回答有效,请接受。”PanchoMulongeni很乐意帮忙。如果有效,请接受我的回答。