我正在尝试做一些非常简单的事情:通过名称向量运行一个循环并在我的代码中使用这些名称。
geo = c(rep("AT",3),rep("BE",3))
time = c(rep(c("1990Q1","1990Q2","1990Q3"),2))
value = c(1:6)
Data <- data.frame(geo,time,value)
我的真实数据集有 14 个国家和 75 个时间段。我想找到一个函数,例如循环遍历各个国家,然后对它们进行子集化,这样我就有了单个数据集,例如:
data_AT <- subset(Data, (Data$geo=="AT"))
data_BE <- subset(Data, (Data$geo=="BE"))
但是有了一个循环,理想情况下有了一个解决方案,我也可以将其应用于其他功能:-)
在我看来,这应该是这样的:
codes <- unique(Data$geo)
for (i in 1:length(codes))
{k <- codes[i]
data_(k) <- subset(Data, (Data$geo==k))}
但是 subset 不是这样工作的,其他函数也不是。我认为我的问题是我不知道如何解决“k”所采用的相应名称(例如“AT”)作为我的代码的一部分。如果可能的话,我将非常感谢关于如何通过包含文本的向量运行函数并在我的代码中使用该向量的每个元素的通用解决方案的答案。也许在应用功能的方向?虽然我也没有走得太远......
非常感谢任何帮助!
最佳答案
我也将循环用于类似的目的。也许这不是最快的方法,但至少我理解它——例如,在为不同的子集保存图时。
不需要遍历向量的长度,你可以遍历向量本身。要将字符串转换为变量名,您可以使用 assign。
geo = c(rep("AT",3),rep("BE",3))
time = c(rep(c("1990Q1","1990Q2","1990Q3"),2))
value = c(1:6)
Data <- data.frame(geo,time,value)
codes <- sort(unique(Data$geo))
for (k in codes) {
name<-paste("data", k, sep="_")
assign(name, subset(Data, (Data$geo==k)))
}
顺便说一句,包 dplyr 的过滤器比子集快得多!
关于r - 如何通过 R 中数据帧的字符串向量运行 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25164179/