gpt4 book ai didi

r - 将数据帧的互补行与 R 合并

转载 作者:行者123 更新时间:2023-12-03 13:34:28 24 4
gpt4 key购买 nike

我有这样一个数据框

0     weekday day month year hour basal bolus carb period.h
1 Tuesday 01 03 2016 0.0 0.25 NA NA 0
2 Tuesday 01 03 2016 10.9 NA NA 67 10
3 Tuesday 01 03 2016 10.9 NA 4.15 NA 10
4 Tuesday 01 03 2016 12.0 0.30 NA NA 12
5 Tuesday 01 03 2016 17.0 0.50 NA NA 17
6 Tuesday 01 03 2016 17.6 NA NA 33 17
7 Tuesday 01 03 2016 17.6 NA 1.35 NA 17
8 Tuesday 01 03 2016 18.6 NA NA 44 18
9 Tuesday 01 03 2016 18.6 NA 1.80 NA 18
10 Tuesday 01 03 2016 18.9 NA NA 17 18
11 Tuesday 01 03 2016 18.9 NA 0.70 NA 18
12 Tuesday 01 03 2016 22.0 0.40 NA NA 22
13 Wednesday 02 03 2016 0.0 0.25 NA NA 0
14 Wednesday 02 03 2016 9.7 NA NA 39 9
15 Wednesday 02 03 2016 9.7 NA 2.65 NA 9
16 Wednesday 02 03 2016 11.2 NA NA 13 11
17 Wednesday 02 03 2016 11.2 NA 0.30 NA 11
18 Wednesday 02 03 2016 12.0 0.30 NA NA 12
19 Wednesday 02 03 2016 12.0 NA NA 16 12
20 Wednesday 02 03 2016 12.0 NA 0.65 NA 12

如果您查看第 2 行和第 3 行,您会注意到它们完全对应于同一天和同一时间:仅对于第 2 行,“carb”不是 NA,“bolus”不是 NA(这些是关于糖尿病)。

我想将这些行合并为一个:
2    Tuesday  01    03 2016 10.9    NA    NA   67       10
3 Tuesday 01 03 2016 10.9 NA 4.15 NA 10

->
2    Tuesday  01    03 2016 10.9    NA    4.15   67       10

我当然可以在每一行上做一个残酷的双循环,但我寻找一种更聪明、更快的方法。

最佳答案

您可以按通用标识符列 weekday, day, month, year, hour, period.h 对数据框进行分组。在这里,然后从要合并的剩余列中排序并取出第一个元素,sort()函数默认会删除NA s 在要排序的向量中,因此您最终将得到每个组中每列的非 NA 元素;如果列中的所有元素都是 NA , sort(col)[1]返回不适用:

library(dplyr)
df %>%
group_by(weekday, day, month, year, hour, period.h) %>%
summarise_all(funs(sort(.)[1]))

# weekday day month year hour period.h basal bolus carb
# <fctr> <int> <int> <int> <dbl> <int> <dbl> <dbl> <int>
# 1 Tuesday 1 3 2016 0.0 0 0.25 NA NA
# 2 Tuesday 1 3 2016 10.9 10 NA 4.15 67
# 3 Tuesday 1 3 2016 12.0 12 0.30 NA NA
# 4 Tuesday 1 3 2016 17.0 17 0.50 NA NA
# 5 Tuesday 1 3 2016 17.6 17 NA 1.35 33
# 6 Tuesday 1 3 2016 18.6 18 NA 1.80 44
# 7 Tuesday 1 3 2016 18.9 18 NA 0.70 17
# 8 Tuesday 1 3 2016 22.0 22 0.40 NA NA
# 9 Wednesday 2 3 2016 0.0 0 0.25 NA NA
# 10 Wednesday 2 3 2016 9.7 9 NA 2.65 39
# 11 Wednesday 2 3 2016 11.2 11 NA 0.30 13
# 12 Wednesday 2 3 2016 12.0 12 0.30 0.65 16

而不是 sort() ,也许在这里使用更合适的函数是 na.omit() :
df %>% group_by(weekday, day, month, year, hour, period.h) %>% 
summarise_all(funs(na.omit(.)[1]))

关于r - 将数据帧的互补行与 R 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39987444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com