我正在研究R中的模糊匹配脚本。 在此我需要为列表中的每个国家/地区分配数据框,然后按国家/地区进行匹配。 但是,我对R中循环的了解相当低。
此脚本应返回afrocountrylist中每个国家/地区的子集。 关于如何使这个子集工作的任何建议?
谢谢!
afrobaro <- data.frame(country=rep(c("Benin","Uganda","Mali"),each=5),
region=c("Benind1","Benin2","Benins3","Benina4","Benin5",
"Ugandat1","Ugandar2","Ugandae3","Uganda4","Uganda5",
"Mali1r","Mali2","Malig3","Mali4","Mali5"))
jaroloop <- function(afrobaro, afrocountry,afroregion){
afrocountrylist <- as.vector(unique(as.character(afrobaro[, afrocountry])))
for(i in afrocountrylist){
x <- afrocountrylist[i]
print(x)
afroregions <- subset(afrobaro, afrobaro$afrocountry == x)
print(afroregions)
}
}
答案 0 :(得分:2)
您可以使用split
沿向量拆分数据框:
res <- split(afrobaro, afrobaro$country)
# $Benin
# country region
# 1 Benin Benind1
# 2 Benin Benin2
# 3 Benin Benins3
# 4 Benin Benina4
# 5 Benin Benin5
#
# $Mali
# country region
# 11 Mali Mali1r
# 12 Mali Mali2
# 13 Mali Malig3
# 14 Mali Mali4
# 15 Mali Mali5
#
# $Uganda
# country region
# 6 Uganda Ugandat1
# 7 Uganda Ugandar2
# 8 Uganda Ugandae3
# 9 Uganda Uganda4
# 10 Uganda Uganda5
这将返回包含三个子集的列表。您可以使用例如第一个子集的res$Benin
或res[[1]]
来访问列表元素(子集)。
# country region
# 1 Benin Benind1
# 2 Benin Benin2
# 3 Benin Benins3
# 4 Benin Benina4
# 5 Benin Benin5
一旦您拥有子集列表,就可以使用lapply
轻松地将函数应用于每个子集。
您还可以使用for
循环来提取所有子集:
for (i in unique(afrobaro$country)) {
afroregions <- afrobaro[afrobaro$country == i, ]
print(afroregions)
}
这将打印所有子集。但请注意,每次运行都会覆盖afroregions
。这与您的示例代码类似。