我试图循环遍历许多对象,对每个对象中的数据帧执行一些子集化。此外,在每个数据框内,我在几年内进行了子集化。我使用带有数据帧名称的字符向量将数据传递到循环中,然后使用assign()将其传递回字符名称。问题是循环在分配时不会将任何行返回到数据帧。这是代码:
dfs <- c('df.one', 'df.two', 'df.three', etc.)
year <- NULL;
for (i in 1:length(dfs)) {
data <- get(dfs[i]);
for (j in unique(data$year)) {
yr <- data[data$year==unique(data$year)[j],]
yr <- subset(yr, snowmelt.date <= sampling.date)
year <- rbind(year, yr)
}
assign(dfs[i], year)
}
对于其他方法的任何想法或想法将不胜感激!谢谢你的帮助。
比
P.S。如果一个实际可重复的例子对此有帮助,请告诉我。我只是觉得有人可以通过查看代码来挑选一些东西。
答案 0 :(得分:0)
评论太长了。
首先,在你的内部循环中,你将j设置为年代序列:
for (j in unique(data$year)) ...
然后在循环的第一行中使用j作为索引(行号...):
yr <- data[data$year==unique(data$year)[j],]
因此,如果年份是2012年,那么您正试图找到2012年的独特年份向量。可能没有2012行,所以条件失败并且结果中没有行。试试这个:
yr <- data[data$year==j,]
其次,我没有看到内循环的重点。看起来snowmelt.date
和sampling.date
是data
的列。您似乎希望所有年份的行都在snowmelt.date <= sampling.date
,所以为什么不使用:
for (i in 1:length(dfs)) {
data <- get(dfs[i]);
year <- data[data$snowmelt.date <= data$sampling$date,]
assign(dfs[i], year)
}