【问题标题】:Problems with Combining and writing filtered data合并和写入过滤数据的问题
【发布时间】:2020-04-17 22:30:42
【问题描述】:

我在下面提供了一些过滤(使用 dplyr)数据,来自一个更大的 .csv 文件。我打算用这个作为我的独立。线性回归模型中的变量,我也想组合这些列并将它们写入 .csv(因为我正在与我的团队分享。)

我之前将这些数据保存为“列表”(因为每个变量的长度不同),但是当我写入 csv 时,我必须将其转换为矩阵,并且数据与预期的不太一样。

这里的问题是每个过滤集都是不同长度之一,因此不同的值 (CountPD) 归因于不同的日期。如何正确地将这些数据中的每一个组合到一个数据框(或类似的东西)中,我可以在其中编写为 csv 并在将来应用线性回归(即 colnames 是“Date”,“y1”,“y2 “……等等)

Y1:

structure(list(Date = structure(c(12083, 12111, 12142, 12172, 
12203, 17500, 17531, 17562, 17590, 17621, 17651), class = "Date"), 
    CountPD = c(1, 1, 1, NA, 1, NA, 0.083, NA, NA, 0.083, 0.083
    )), row.names = c(1L, 2L, 3L, 4L, 5L, 179L, 180L, 181L, 182L, 
183L, 184L), class = "data.frame")

Y2:

structure(list(Date = structure(c(17013, 17044, 17074, 17105, 
17135, NA), class = "Date"), CountPD = c(NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_)), row.names = c("1", 
"2", "3", "4", "5", "NA"), class = "data.frame")

Y3:

structure(list(Date = structure(c(12783, 12814, 12842, 12873, 
12903, 17500, 17531, 17562, 17590, 17621, 17651), class = "Date"), 
    CountPD = c(NA, 0.333, NA, NA, NA, NA, 0.125, 0.125, 0.222, 
    0.2, 0.25)), row.names = c(1L, 2L, 3L, 4L, 5L, 156L, 157L, 
158L, 159L, 160L, 161L), class = "data.frame")

Y4:

structure(list(Date = structure(c(12356, 12417, 12448, 12477, 
12508, 17500, 17531, 17562, 17590, 17621, 17651), class = "Date"), 
    CountPD = c(NA, NA, NA, NA, NA, 0.2, 0.2, 0.182, 0.182, 0.222, 
    0.25)), row.names = c(1L, 2L, 3L, 4L, 5L, 160L, 161L, 162L, 
163L, 164L, 165L), class = "data.frame")```


【问题讨论】:

    标签: r dataframe sorting linear-regression data-cleaning


    【解决方案1】:

    这是使用tidyverse 的一种方法。注意bind_rows包含Y1 = Y1等,这样=左边的赋值就会变成pivot_wider后面的列名,右边的名字就是本例提供的数据框(也叫Y1、Y2、Y3 和 Y4)。这是否达到了您的预期?

    library(tidyverse)
    
    bind_rows(list(Y1 = Y1, Y2 = Y2, Y3 = Y3, Y4 = Y4), .id = 'Source') %>%
      pivot_wider(id_cols = Date, names_from = Source, values_from = CountPD)
    

    输出

    # A tibble: 27 x 5
       Date           Y1    Y2     Y3     Y4
       <date>      <dbl> <dbl>  <dbl>  <dbl>
     1 2003-01-31  1        NA NA     NA    
     2 2003-02-28  1        NA NA     NA    
     3 2003-03-31  1        NA NA     NA    
     4 2003-04-30 NA        NA NA     NA    
     5 2003-05-31  1        NA NA     NA    
     6 2017-11-30 NA        NA NA      0.2  
     7 2017-12-31  0.083    NA  0.125  0.2  
     8 2018-01-31 NA        NA  0.125  0.182
     9 2018-02-28 NA        NA  0.222  0.182
    10 2018-03-31  0.083    NA  0.2    0.222
    11 2018-04-30  0.083    NA  0.25   0.25 
    

    【讨论】:

    • 是的!这正是我想要的。你介意解释一下为什么 bind_rows 在这里比 bind_cols 更合适吗?
    • bind_rows 可以轻松地将多个数据集绑定到一个列表中,您可以从它开始。数据框共享共同的DateCountPD 列,因此将它们与相似的数据元素组合是合乎逻辑的。如果您这样做,您将获得“长”格式的数据,这通常便于分析和进一步操作。但在这种情况下,听起来您希望将其转换为“宽”格式(因此为pivot_wider)。 bind_cols 可以将列从一个数据帧添加到另一个数据帧,如果数据帧的长度相等,并且 Date 列完全相同,这可能会起作用。
    • 另外,Date在将数据帧组合在一起时可以考虑“合并”或“加入”。
    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多