R 根据顺序将缺少值的数据框与完整数据框对齐
我在R中有两个数据框。一个“参考”框包含我的所有观察结果,另一个额外的数据框包含观察结果(大)子集的额外数据。我想将两个框架连接在一起,用R 根据顺序将缺少值的数据框与完整数据框对齐,r,dataframe,merge,tidyverse,R,Dataframe,Merge,Tidyverse,我在R中有两个数据框。一个“参考”框包含我的所有观察结果,另一个额外的数据框包含观察结果(大)子集的额外数据。我想将两个框架连接在一起,用NA填充缺少的值。复杂的情况(这使我无法仅使用merge/left_join)是,观测值仅使用多个列的组合进行唯一识别,但附加数据框仅包含一个识别列。但是,两个数据帧的顺序保证相同。 以下是一些简单的示例数据,也说明了问题: 库(tidyverse) 水果大小=tribble(~水果,~颜色,~大小, “苹果”,“红色”,5, “樱桃”,“红色”,2, “草莓
NA
填充缺少的值。复杂的情况(这使我无法仅使用merge
/left_join
)是,观测值仅使用多个列的组合进行唯一识别,但附加数据框仅包含一个识别列。但是,两个数据帧的顺序保证相同。
以下是一些简单的示例数据,也说明了问题:
库(tidyverse)
水果大小=tribble(~水果,~颜色,~大小,
“苹果”,“红色”,5,
“樱桃”,“红色”,2,
“草莓”,“红色”,3,
“苹果”,“绿色”,6,
“石灰”,“绿色”,4,
“苹果”,“黄色”,5)
水果价格=tribble(~fruit,~price,
“苹果”,1.5,
“草莓”,0.2,
“石灰”,2.0,
“苹果”,1.3)
#预期结果:
#
##tibble:6 x 4
#水果颜色大小价格
#
#1苹果红5 1.5
#2樱桃红2 NA
#3草莓红30.2
#4苹果绿6 NA
#5石灰绿4 2
#6苹果黄51.3
(水果通过名称和颜色进行识别,但价格表缺少颜色信息。但是,两个表的水果顺序相同。)
所以现在我的问题是如何使用第二个表的顺序信息将其数据与第一个表对齐/匹配。可以假定不存在任何模棱两可的情况。(我在示例和实际数据中使用的是TIBLES,但非tidyverse解决方案也可以。)afor
循环解决方案-
fruit_sizes$price <- NA
j <- 1
for(i in seq(nrow(fruit_sizes))) {
if(fruit_sizes$fruit[i] == fruit_prices$fruit[j]) {
fruit_sizes$price[i] <- fruit_prices$price[j]
j <- j + 1
}
}
fruit_sizes
# fruit colour size price
# <chr> <chr> <dbl> <dbl>
#1 apple red 5 1.5
#2 cherry red 2 NA
#3 strawberry red 3 0.2
#4 apple green 6 NA
#5 lime green 4 2
#6 apple yellow 5 1.3
水果大小$priceAfor
loop解决方案-
fruit_sizes$price <- NA
j <- 1
for(i in seq(nrow(fruit_sizes))) {
if(fruit_sizes$fruit[i] == fruit_prices$fruit[j]) {
fruit_sizes$price[i] <- fruit_prices$price[j]
j <- j + 1
}
}
fruit_sizes
# fruit colour size price
# <chr> <chr> <dbl> <dbl>
#1 apple red 5 1.5
#2 cherry red 2 NA
#3 strawberry red 3 0.2
#4 apple green 6 NA
#5 lime green 4 2
#6 apple yellow 5 1.3
fruit\u size$price这看起来可以处理示例数据fine。这看起来可以处理示例数据fine。