【问题标题】:How to extract specific dataframe from an output in r?如何从 r 的输出中提取特定的数据帧?
【发布时间】:2020-04-08 08:31:04
【问题描述】:

我有如下输出;

在我的输出中有几个这样的集群。如您所见,有 2 列(第 1 天和第 2 天)。我想每天提取(或导出)以Hour_1 开头的数据框。

所以对于Cluster 1,我想要两个数据帧,一个以0.00, 0, 0... 开头,一直持续到Hour_24,另一个以1.07, 0, 0... 开头,一直持续到Hour_24

这是我的数据结构;

 v1<-structure(list(`Cluster 1` = structure(list(Day = c(1, 2), Season = c(1, 
    1), Year = c(2011, 2011), Daily = c(1.48, 2.53), Hour_1 = c(0, 
    1.07), Hour_2 = c(0, 0), Hour_3 = c(0, 0), Hour_4 = c(0, 0), 
        Hour_5 = c(0, 0), Hour_6 = c(0, 1.27), Hour_7 = c(0, 0.19
        ), Hour_8 = c(0, 0), Hour_9 = c(0, 0), Hour_10 = c(0, 0), 
        Hour_11 = c(0, 0), Hour_12 = c(0, 0), Hour_13 = c(0, 0), 
        Hour_14 = c(0, 0), Hour_15 = c(0, 0), Hour_16 = c(0, 0), 
        Hour_17 = c(0, 0), Hour_18 = c(0.041, 0), Hour_19 = c(0.673, 
        0), Hour_20 = c(0, 0), Hour_21 = c(0, 0), Hour_22 = c(0, 
        0), Hour_23 = c(0.319, 0), Hour_24 = c(0.447, 0)), .Names = c("Day", 
    "Season", "Year", "Daily", "Hour_1", "Hour_2", "Hour_3", "Hour_4", 
    "Hour_5", "Hour_6", "Hour_7", "Hour_8", "Hour_9", "Hour_10", 
    "Hour_11", "Hour_12", "Hour_13", "Hour_14", "Hour_15", "Hour_16", 
    "Hour_17", "Hour_18", "Hour_19", "Hour_20", "Hour_21", "Hour_22", 
    "Hour_23", "Hour_24"), row.names = c("Day_1", "Day_2"), class = "data.frame"), 
        `Cluster 2` = structure(list(Day = c(7, 8), Season = c(1, 
        1), Year = c(2011, 2011), Daily = c(0.19, 0.75), Hour_1 = c(0, 
        0), Hour_2 = c(0, 0.521), Hour_3 = c(0, 0.229), Hour_4 = c(0, 
        0), Hour_5 = c(0, 0), Hour_6 = c(0, 0), Hour_7 = c(0, 0), 
            Hour_8 = c(0, 0), Hour_9 = c(0, 0), Hour_10 = c(0, 0), 
            Hour_11 = c(0, 0), Hour_12 = c(0, 0), Hour_13 = c(0, 
            0), Hour_14 = c(0, 0), Hour_15 = c(0, 0), Hour_16 = c(0, 
            0), Hour_17 = c(0.189, 0), Hour_18 = c(0.001, 0), Hour_19 = c(0, 
            0), Hour_20 = c(0, 0), Hour_21 = c(0, 0), Hour_22 = c(0, 
            0), Hour_23 = c(0, 0), Hour_24 = c(0, 0)), .Names = c("Day", 
        "Season", "Year", "Daily", "Hour_1", "Hour_2", "Hour_3", 
        "Hour_4", "Hour_5", "Hour_6", "Hour_7", "Hour_8", "Hour_9", 
        "Hour_10", "Hour_11", "Hour_12", "Hour_13", "Hour_14", "Hour_15", 
        "Hour_16", "Hour_17", "Hour_18", "Hour_19", "Hour_20", "Hour_21", 
        "Hour_22", "Hour_23", "Hour_24"), row.names = c("Day_3", 
        "Day_4"), class = "data.frame")), .Names = c("Cluster 1", 
    "Cluster 2"))

【问题讨论】:

    标签: r extract


    【解决方案1】:

    您可以将所有以“小时”开头的列聚集在一起。

    lapply(v1, function(x) x[grep('Hour', names(x))])
    
    #$`Cluster 1`
    #      Hour_1 Hour_2 Hour_3 Hour_4 Hour_5 Hour_6 Hour_7 Hour_8...
    #Day_1   0.00      0      0      0      0   0.00   0.00      0...
    #Day_2   1.07      0      0      0      0   1.27   0.19      0...
    
    #$`Cluster 2`
    #      Hour_1 Hour_2 Hour_3 Hour_4 Hour_5 Hour_6 Hour_7 Hour_8...
    #Day_3      0  0.000  0.000      0      0      0      0      0...
    #Day_4      0  0.521  0.229      0      0      0      0      0...
    

    如果你想每天分开,你可以使用asplit

    lapply(v1, function(x) asplit(x[grep('Hour', names(x))], 1))
    

    【讨论】:

    • 我希望每天分开,但我需要使用 R 3.3.0。此版本不存在 asplit 功能。我还能用什么替代品?
    • @HüsamettinTayşi 你可以使用splitlapply(v1, function(x) split(x[grep('Hour', names(x))], 1:nrow(x)))
    【解决方案2】:

    tidyverse 的选项

    library(purrr)
    library(dplyr)
    map(v1, ~ .x %>%
                 select(contains('Hour')))
    #$`Cluster 1`
    #      Hour_1 Hour_2 Hour_3 Hour_4 Hour_5 Hour_6 Hour_7 Hour_8 Hour_9 Hour_10 #Hour_11 Hour_12 Hour_13
    #Day_1   0.00      0      0      0      0   0.00   0.00      0      0       0       0       0       0
    #Day_2   1.07      0      0      0      0   1.27   0.19      0      0       0       0       0       0
    #      Hour_14 Hour_15 Hour_16 Hour_17 Hour_18 Hour_19 Hour_20 Hour_21 Hour_22 #Hour_23 Hour_24
    #Day_1       0       0       0       0   0.041   0.673       0       0       0   0.319   0.447
    #Day_2       0       0       0       0   0.000   0.000       0       0       0   0.000   0.000
    
    #$`Cluster 2`
    #      Hour_1 Hour_2 Hour_3 Hour_4 Hour_5 Hour_6 Hour_7 Hour_8 Hour_9 Hour_10 #Hour_11 Hour_12 Hour_13
    #Day_3      0  0.000  0.000      0      0      0      0      0      0       0       0       0       0
    #Day_4      0  0.521  0.229      0      0      0      0      0      0       0       0       0       0
    #      Hour_14 Hour_15 Hour_16 Hour_17 Hour_18 Hour_19 Hour_20 Hour_21 Hour_22 #Hour_23 Hour_24
    #Day_3       0       0       0   0.189   0.001       0       0       0       0       0       0
    #Day_4       0       0       0   0.000   0.000       0       0       0       0       0       0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 2012-05-22
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多