簡體   English   中英

如何在R中聚合數據幀

[英]How to aggregate data frame in r

我創建了以下最小示例。

我想打開這個數據框(這是一個融合,因此有三列:時間,房間和ID)

   structure(list(
  Time = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
           3, 3, 3, 3, 3, 3, 3),
  Room = c("a", "a", "b", "b", "c", "c", "d", "d", "e", "e", "a", "a", "b", "b",
           "c", "c", "d", "d", "e", "e", "a", "a", "b","b", "c", "c", "d", "d",
           "e", "e"),
  ID   = c("A", NA, NA, NA, NA, NA, NA, "B", NA, NA, NA, NA, NA, "C", NA, "D",
           NA, "E", NA, "F", NA, NA, NA, "G", NA, NA, NA, "H", NA, "I")),
  class     = c("tbl_df", "tbl", "data.frame"),
  row.names = c(NA, 30L),
  .Names    = c("Time", "Room", "ID"))

進入這個數據框

   structure(
  list(
    Time = c(1, 2, 3),
    a = c("A", NA, NA),
    b = c(NA, "C", "G"),
    c = c(NA, "D", NA),
    d = c("B", "E", "H"),
    e = c(NA, "F", "I")
  ),
  class = c("tbl_df", "tbl", "data.frame"),
  row.names = c(NA, -3L),
  .Names = c("Time", "a", "b", "c", "d", "e")
)

其中房間為列,時間為行,ID為條目。

我嘗試了以下方法:

dcast(df, Time~Room, fun.aggregate=NULL, value.var='ID')

但是這說: Aggregation function missing: defaulting to length ,盡管結構看起來不錯,但不返回ID值。

我也嘗試了aggregate但似乎不知道該怎么辦。

您可以編寫自己的聚合函數以提取不是NA的第一個值:

dcast(df, Time ~ Room, fun.aggregate = function(x){x[!is.na(x)][1]}, value.var = 'ID')

哪個返回

  Time    a    b    c d    e
1    1    A <NA> <NA> B <NA>
2    2 <NA>    C    D E    F
3    3 <NA>    G <NA> H    I

可能有一種更簡單的方法,但是至少可以。 它確實假設您對於相同的TimeRoom組合, ID不會具有不同的非NA值,因此請了解您的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM