我有两个 Dataframe ,我需要根据匹配检查从中提取变量。不幸的是,仅仅使用dplyr过滤似乎不起作用,因为第二个 Dataframe 是在一个更大的数据集上循环创建的,迭代了55年。对于每一年,我都需要A和B的值,以及C和D作为标识。目标是最终获得A和B的年平均值。
我尝试在循环中使用if语句,如果任何一个检查通过,该语句应该返回true,并随后将值提取到新对象中。我收到以下错误:条件具有长度〉1。if ((df1$C %in% df2$C) | (df1$D %in% df2$D)) { [...] }
提前感谢,我很感激任何指针,因为我似乎无法找出一种方法,而不是手动计算每一步!情况概述如下:
df 1)与相关变量(A,B)和身份检查(C,D)
| 变量A|瓦尔B|检查C|检查D|
| --------------|--------------|--------------|--------------|
| a1|b1|C1|d1|
| a2|b2|c0|d0|
| A3|B3|C3|d0|
df 2)在特定年份观察身份检查(C,D)
| 检查C|检查D|
| --------------|--------------|
| C1|d1|
| C2|d2|
| C3|d3|
第一步:
我想提取每行的变量A和B,这取决于两个身份检查是否匹配。这意味着在上面的示例中,a1/b1将被提取为两个检查匹配,a3/b3将被提取为检查D匹配,而a2/b2将不被考虑,因为两个检查都不匹配。
生成的 Dataframe 将仅包括以下内容
| 变量A|瓦尔B|检查C|检查D|
| --------------|--------------|--------------|--------------|
| a1|b1|C1|d1|
| A3|B3|C3|d0|
第二步:
最终目标是,每个变量的年平均值是这样的
| 平均值A|平均值B|
| --------------|--------------|
| m1a|m1b|
| m2a|m2b|
1条答案
按热度按时间kmbjn2e31#
如果不知道你的数据是什么样子,很难回答这个问题。但是,如果
df1
和df2
有相同的行数,并且df1
中的每一行都对应于df2
中的每一行(即,df1
中的第1行=df2
中的第1行),那么你可以使用一个循环:然后,如果你在
df1
和(现在)df3
中有一个year列,你可以使用tidyverse
函数:或者,您可以从一开始就使用
tidyverse
函数,首先组合两个 Dataframe 。这看起来像这样:然后你可以像上面那样计算年平均值。