我试图基于两个条件(列中的值)合并数据帧中的两行。我的数据如下:
Id Date Hour POL SJC ABA
15 01/01/2017 1 15 18 NA
16 01/01/2017 1 NA NA 4
17 01/01/2017 2 78 56 NA
18 01/01/2017 2 NA NA 16
在这种情况下,应将存储在 Date 和 Hour 中的值用作条件,因此应将两行中的日期和小时匹配在一起,以保留每列中的现有值。以下是预期结果:
Id Date Hour POL SJC ABA
15 01/01/2017 1 15 18 4
16 01/01/2017 2 78 56 16
我通过使用下一个示例进行了尝试:
db <- aggregate(my_data[-(1:2)], by= my_data[c("Date", "Hour")],
function(x) unique(as.numeric(x)))
正如您在这里看到的那样,我正在使用unique()函数尝试保留现有值,但是它似乎无法正常工作。
有什么建议吗?
答案 0 :(得分:2)
使用dplyr
的一个选项可能是:
df %>%
group_by(Date, Hour) %>%
summarise(across(everything(), ~ first(na.omit(.))))
Date Hour Id POL SJC ABA
<chr> <int> <int> <int> <int> <int>
1 01/01/2017 1 15 15 18 4
2 01/01/2017 2 17 78 56 16
答案 1 :(得分:1)
您对函数aggregate
的调用几乎是正确的。在汇总变量之前,只缺少一个逗号。按参数应为要汇总的向量列表。另外,我不会使用unique(x)
作为函数,因为如果有多个有效值,它可能会返回一个向量。如果您将max()
与na.rm=T
一起使用,则效果很好。
> d.agg=aggregate(d[,-(1:2)],by=d[,c("Date","Hour")],FUN=max, na.rm=T)
> colnames(d.agg)[1]='Date'
> colnames(d.agg)[2]='Hour'
## Result:
> d.agg
Date Hour POL SJC ABA
1 01/01/2017 1 15 18 4
2 01/01/2017 2 78 56 16