而不是像这样做一个嵌套的for循环:
for (rowAll in 1:nrow(groupDataUnadjusted)) {
year <- groupDataUnadjusted[rowAll, "year"]
income <- groupDataUnadjusted[rowAll, "income_group"]
joint <- groupDataUnadjusted[rowAll, "Joint"]
child <- groupDataUnadjusted[rowAll, "children"]
for (rowPuf in 1:nrow(nationalPuf)) {
yearPuf <- nationalPuf[rowPuf, "year"]
incomePuf <- nationalPuf[rowPuf, "income_group"]
jointPuf <- nationalPuf[rowPuf, "Joint"]
childPuf <- nationalPuf[rowPuf, "children"]
if ((year == yearPuf) && (income == incomePuf) && (joint == jointPuf) && (child == childPuf)) {
groupDataUnadjusted[rowAll, 'tax_difference_pct'] <- groupDataUnadjusted[rowAll, 'tax_difference_pct'] + nationalPuf[rowPuf, 'diff']
break
}
}
}
groupDataAdjusted <- groupDataUnadjusted
我觉得必须有一种更快的方法来查找两个数据帧之间的相应行。我通过获取数据帧,不同长度以及查看三列相同的位置进行匹配。如果它们是相同的,我知道行是它们之间的匹配。然后我从该行中取一个值并将其添加到另一个数据帧中的值。
但是在R中必须有更好的方法。
答案 0 :(得分:1)
您可以使用dplyr
中的连接函数取决于您是想要保留所有行还是仅保留匹配的行
library(dplyr)
groupDataAdjusted <- left_join(groupDataUnadjusted, nationalPuf, by = c("year", "income_group","Joint","children") %>%
mutate(tax_difference_pct = tax_difference_pct + diff)
请注意,这是未经测试的,因为您没有提供可重现的数据,但应该给您这个想法。
如果这些是唯一匹配的列名,则您不必指定&#34;按&#34;
或使用full_join保留所有行
请参阅本页第2页的右上角: https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf