[英]How can I use for loop for these process in R
我有一个包含 43 个不同国家的数据框。 总结我的数据框,行名称如下:(AUS1, AUS2, AUS3, ... BRA1, BRA2, ... GER1, GER2...GER56) 并且有一个像 Country 这样的变量,其中包括国家代码。
我需要找到他们的出口值。 我可以单独找到,但是要花很多时间,因为我有 14 个不同的年份。 因此,我想使用 for 循环。 但是,我找不到任何方法可以在以下过程中使用 for 循环。
这是我查找单个国家出口的代码。
##AUT
AUT <- filter(wiot, wiot$Country == "AUT")
exportAUT <- sum(AUT$TOT) - sum(select(AUT, starts_with("AUT")))
##BEL
BEL <- filter(wiot, wiot$Country == "BEL")
exportBEL <- sum(BEL$TOT) - sum(select(BEL, starts_with("BEL")))
尝试为这组结果创建单独命名的对象是 R 中的疯狂之路。 相反,创建一个具有更通用名称的列表,然后将结果放在列表中的“叶子”(单个元素)中:
export <- list()
for (i in wiot$Country) {
export[i] <- sum(wiot[i]$TOT) - sum(select(wiot, starts_with(i)))
#or maybe: export[i] <- sum(wiot[i]$TOT) - sum(wiot[ grepl(i,names(wiot)) ] )
}
这是一个猜测,因为我无法弄清楚如何在 data.frame 对象中引用行和列。 如果您对名为wiot
的数据对象提供了一个不那么模糊的描述,那么调试它会容易wiot
。 使用str(wiot)
输出或显示dput(head(wiot))
考虑基础R的by
建立出口计算的命名列表:
export_list <- by(wiot, wiot$country, function(sub)
sum(sub$TOT) - sum(select(sub, starts_with(sub$country[1])))
)
export_list$AUT
export_list$BEL
export_list$GER
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.