【问题标题】:How to reduce & melt dataframes inside a list together如何一起减少和融合列表中的数据框
【发布时间】:2020-09-25 04:51:30
【问题描述】:

更新:

我在一个看起来像这样的列表中有数据框:

v1 <- data.frame(time = c(1, 3, 5, 9, 33),
                 X = c(4, 3, 2, 3, 12),
                 SE = c(1, 2, 3, 2, 1))
v2 <- data.frame(time = c(1, 3, 5, 9, 33),
                    Y = c(12, 3, NA, 2, 4),
                 SE = c(1, 2, 1, 12, 3))
list <- list(v1, v2)

我想融化/减少它看起来像这样:

   time variable value SE
1     1        X     4  1
2     3        X     3  2
3     5        X     2  3
4     9        X     3  2
5    33        X    12  1
6     1        Y    12  1
7     3        Y     3  2
8     5        Y    NA  1
9     9        Y     2 12
10   33        Y     4  3

到目前为止,我已尝试此代码无济于事。

data <- list %>% reduce(full_join, by = "time") 
data2 <- melt(data, id = c("time"))

谢谢!

【问题讨论】:

    标签: r reduce data-cleaning melt


    【解决方案1】:

    我们可以使用meltpatterns

    library(data.table)
    melt(setDT(data), measure = patterns('X|Y', 'SE'), 
       value.name = c('value', 'SE'))[, variable := c("X", "Y")[variable]][]
    #     time variable value SE
    # 1:    1        X     4  1
    # 2:    3        X     3  2
    # 3:    5        X     2  3
    # 4:    9        X     3  2
    # 5:   33        X    12  1
    # 6:    1        Y    12  1
    # 7:    3        Y     3  2
    # 8:    5        Y    NA  1
    # 9:    9        Y     2 12
    #10:   33        Y     4  3
    

    或者使用pivot_longer

    library(tidyr)
    library(stringr)
    library(dplyr)
    data %>%
        rename_at(vars(X, Y), ~ str_c('value.', tolower(.))) %>% 
        pivot_longer(cols = -time, names_to = c('.value', 'variable'), 
            names_sep="\\.", values_drop_na = TRUE) %>% 
        arrange(variable)
    # A tibble: 10 x 4
    #    time variable value    SE
    #   <dbl> <chr>    <dbl> <dbl>
    # 1     1 x            4     1
    # 2     3 x            3     2
    # 3     5 x            2     3
    # 4     9 x            3     2
    # 5    33 x           12     1
    # 6     1 y           12     1
    # 7     3 y            3     2
    # 8     5 y           NA     1
    # 9     9 y            2    12
    #10    33 y            4     3
    

    【讨论】:

    • 我的帖子有误,已更新。你能再看看吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多