[英]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
可能有一種更簡單的方法,但是至少可以。 它確實假設您對於相同的Time
和Room
組合, ID
不會具有不同的非NA
值,因此請了解您的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.