“替换缺失的”;不适用;通过在R中绑定具有匹配属性的行来获取值
我正在处理一个有一些清洁问题的大型数据集。为了你的理智,我举了一个更简单的例子。假设数据集如下所示:“替换缺失的”;不适用;通过在R中绑定具有匹配属性的行来获取值,r,bind,missing-data,R,Bind,Missing Data,我正在处理一个有一些清洁问题的大型数据集。为了你的理智,我举了一个更简单的例子。假设数据集如下所示: A B C D E F G H 1 Albania 2015 10 NA NA NA 60 NA 2 Albania 2015 NA NA 50 NA NA 10 3 Greece 2016 30 NA 20 NA N
A B C D E F G H
1 Albania 2015 10 NA NA NA 60 NA
2 Albania 2015 NA NA 50 NA NA 10
3 Greece 2016 30 NA 20 NA NA NA
4 Greece 2016 NA 400 NA 30 30 10
5 Greece 2017 NA 40 NA NA NA NA
6 Greece 2017 20 NA 30 30 50 10
7 Albania 2015 NA 200 NA 40 NA NA
A B C D E F G H
1 Albania 2015 10 200 50 40 60 10
2 Greece 2016 30 400 20 30 30 10
3 Greece 2017 20 40 30 30 50 10
请原谅我的复杂性,但我希望有一个解决方案能适合我的实际应用。如您所见,行的重复条目(如阿尔巴尼亚2015)导致变量观测分布在多行中。我希望在前两列(国家和年份)中使用匹配的字符串值绑定行,并将分散变量值(C-H)统一到一行中。最后,数据框应如下所示:
A B C D E F G H
1 Albania 2015 10 NA NA NA 60 NA
2 Albania 2015 NA NA 50 NA NA 10
3 Greece 2016 30 NA 20 NA NA NA
4 Greece 2016 NA 400 NA 30 30 10
5 Greece 2017 NA 40 NA NA NA NA
6 Greece 2017 20 NA 30 30 50 10
7 Albania 2015 NA 200 NA 40 NA NA
A B C D E F G H
1 Albania 2015 10 200 50 40 60 10
2 Greece 2016 30 400 20 30 30 10
3 Greece 2017 20 40 30 30 50 10
有人能帮我找到解决办法吗?谢谢 我们可以按“A”、“B”和
对其余列进行分组,并使用其中一个函数max/sum/min
对其进行汇总,因为每个列/组只有一个非NA元素
library(dplyr)
df1 %>%
group_by(A, B) %>%
summarise_at(vars(-group_cols()), ~ if(all(is.na(.))) NA
else max(., na.rm = TRUE))
# A tibble: 3 x 8
# Groups: A [2]
# A B C D E F G H
# <chr> <int> <int> <int> <int> <int> <int> <int>
#1 Albania 2015 10 200 50 40 60 10
#2 Greece 2016 30 400 20 30 30 10
#3 Greece 2017 20 40 30 30 50 10
库(dplyr)
df1%>%
(A,B)组%>%
总结(vars(-group_cols()),~if(all(is.na())na
else最大值(,不适用于rm=TRUE))
#一个tibble:3x8
#分组:A[2]
#A B C D E F G H
#
#1阿尔巴尼亚2015 1020050406010
#2希腊2016 30 400 20 30 10
#3希腊2017 20 40 30 50 10
数据
df1这个成功了!最后一个问题——如果同一个匹配错误地有两个不同的值/重复条目,会发生什么?有没有办法在默认情况下只选择一个值(例如,最大/最小值)?@TiberiusGracchus2020max
将通过以下方式选择单个max
值:default@TiberiusGracchus2020您可以检查max(c(50,50,20,NA),NA.rm=TRUE)
@TiberiusGracchus2020更新了注释