tidyr::spread 导致多行

tidyr::spread resulting in multiple rows

我遇到了与以下类似的问题,但以下 link 中提供的解决方案对我不起作用:

我有一个结构如下的 df:

    UndesiredIndex  DesiredIndex    DesiredRows Result
1   x1A x1  A   50,32
2   x1B x2  B   7,34
3   x2A x1  A   50,33
4   x2B x2  B   7,35

使用下面的代码:

  dftest <- bd_teste %>%
  select(-UndesiredIndex) %>%
  spread(DesiredIndex, Result)

我期望得到以下结果:

DesiredIndex    A   B
A   50,32   50,33
B   7,34    7,35

虽然,我不断得到以下结果:

    DesiredIndex    x1  x2
1   A   50.32   NA
2   B   7.34    NA
3   A   NA  50.33
4   B   NA  7.35

PS:有时我用 select(-UndesiredIndex) 强制删除列 UndesiredIndex,但我不断收到以下消息:

添加缺失的分组变量:UndesiredIndex

可能很容易堆叠这些行,但我是 R 的新手并且一直在努力解决这个问题但没有成功。 提前致谢!

我们按 DesiredIndex 分组,创建一个序列列,然后执行 spread:

library(tidyverse)

df1 %>% 
    select(-UndesiredIndex) %>% 
    group_by(DesiredIndex) %>% 
    mutate(new = LETTERS[row_number()]) %>% 
    ungroup %>%
    select(-DesiredIndex) %>% 
    spread(new, Result)

# A tibble: 2 x 3
#  DesiredRows A     B    
#  <chr>       <chr> <chr>
#1 A           50,32 50,33
#2 B           7,34  7,35 

数据

df1 <- structure(
    list(
        UndesiredIndex = c("x1A", "x1B", "x2A", "x2B"), 
        DesiredIndex = c("x1", "x2", "x1", "x2"), 
        DesiredRows = c("A", "B", "A", "B"), 
        Result = c("50,32", "7,34", "50,33", "7,35")
    ), 
    class = "data.frame", 
    row.names = c("1", "2", "3", "4")
)

更短,但理论上更迂回。

数据

(感谢@akrun!)

df1 <- structure(
    list(
        UndesiredIndex = c("x1A", "x1B", "x2A", "x2B"), 
        DesiredIndex = c("x1", "x2", "x1", "x2"), 
        DesiredRows = c("A", "B", "A", "B"), 
        Result = c("50,32", "7,34", "50,33", "7,35")
    ), 
    class = "data.frame", 
    row.names = c("1", "2", "3", "4")
)

这是连接行的好方法。

df1 %>% 
  group_by(DesiredRows) %>% 
  summarise(Result = paste(Result, collapse = "|")) %>% #<Concatenate rows
  separate(Result, into = c("A", "B"), sep = "\|")     #<Separate by '|'

#> # A tibble: 2 x 3
#>   DesiredRows A     B    
#>   <chr>       <chr> <chr>
#> 1 A           50,32 50,33
#> 2 B           7,34  7,35

reprex package (v0.2.0) 创建于 2018-08-06。