【问题标题】:R long to wide data frame with only 2 columns [duplicate]R只有2列的长到宽数据框[重复]
【发布时间】:2021-01-03 19:09:27
【问题描述】:

我正在尝试在 R 中解决这个非常琐碎的问题,但我无法完全弄清楚。我有一个只有两列的数据框。

> dput(rrr)
structure(list(row = c(1, 2, 3, 4, 1, 2, 4, 6, 1, 3, 4, 5, 1, 
4, 2, 3, 6, 7, 5, 3, 5, 4, 7, 8, 2, 6, 4, 7, 10, 4, 7, 5, 6, 
10, 9, 8, 5, 8, 7, 9, 7, 9, 8, 10, 6, 10, 7, 9), col = c("1", 
"1", "1", "1", "2", "2", "2", "2", "3", "3", "3", "3", "4", "4", 
"4", "4", "4", "4", "4", "5", "5", "5", "5", "5", "6", "6", "6", 
"6", "6", "7", "7", "7", "7", "7", "7", "7", "8", "8", "8", "8", 
"9", "9", "9", "9", "10", "10", "10", "10")), row.names = c(1L, 
2L, 4L, 6L, 16L, 17L, 19L, 21L, 31L, 32L, 34L, 36L, 46L, 47L, 
48L, 50L, 53L, 55L, 57L, 58L, 59L, 60L, 63L, 65L, 70L, 71L, 72L, 
75L, 77L, 82L, 83L, 84L, 86L, 89L, 91L, 93L, 94L, 95L, 96L, 99L, 
109L, 110L, 111L, 115L, 125L, 126L, 127L, 129L), class = "data.frame")

理想情况下,我想从这个开始:

到这里:

col 中与行中的每个值匹配的数字在新列中写在它旁边。理想情况下,当数字与您在下面的示例中看到的相同时,我不想在新列中写入数字。 我曾尝试使用重塑,但我迷路了,因为我只有 2 列,而我看到的大多数示例都有 3 列。 我希望有一个人可以帮助我。 谢谢!

【问题讨论】:

    标签: r tidyverse reshape


    【解决方案1】:

    我们创建一个序列列并进行数据透视

    library(dplyr)
    library(tidyr)
    library(data.table)
    rrr %>% 
        mutate(rn = rowid(row)) %>%
        pivot_wider(names_from = rn, values_from = col)
    # A tibble: 10 x 8
    #     row `1`   `2`   `3`   `4`   `5`   `6`   `7`  
    #   <dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
    # 1     1 1     2     3     4     <NA>  <NA>  <NA> 
    # 2     2 1     2     4     6     <NA>  <NA>  <NA> 
    # 3     3 1     3     4     5     <NA>  <NA>  <NA> 
    # 4     4 1     2     3     4     5     6     7    
    # ...
    

    data.table

    dcast(setDT(rrr), row ~ rowid(row), value.var = 'col')
    

    【讨论】:

    • 完美!非常感谢 akrun 你总是超级乐于助人!
    • 所以我处理不再写自己的方法是首先从我的数据中过滤掉那些重复。万一有人有同样的问题a &lt;- subset(rrr, row != col)然后跟着akrun回复
    • @Amaranta_Remedios 这里unique(rrr) 将提供与nrow(rrr) 相同的行数。但是您希望输出的行数等于“行”中唯一元素的数量。这就是我基于该列创建序列的原因,以便新创建的序列将成为透视序列的列名
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多