如何在没有覆盖的情况下进行循环?

时间:2013-05-15 13:47:40

标签: r for-loop dataframe

我有一个大型数据框架,称为降雨,有许多物种的信息在不同的时间(人口普查)不同的地块中,我想从中提取信息。这个数据框有很多列,而在dataF2中我想保持相同的结构,但是我想从雨中提取倒数第​​二次人口普查的信息(Census.No是雨中的一个柱子)(Plot.Code是另一个)。在idx3中,我有每个情节倒数第二次人口普查的信息。

一个情节很容易做到

data1<- rain[Plot.Code==idx3[1,1] & Census.No==idx3[1,2],] 

我一直在尝试为R中的循环做..但是我一直覆盖我的data.frame并且最后一个循环结束。

dataF2<- data.frame(nrow= nrow (rain), ncol = ncol (rain))
summary (dataF2)
for (i in 1:length (idx3[,1])){
dataF2<- rain[Plot.Code==idx3[i,1] & Census.No==idx3[i,2],] 
}

在这里,我想从数据框中提取每个图中倒数第二次人口普查的信息(ixd3包含每个图中倒数第二次人口普查的信息)。 我尝试了很多东西,比如:

dataF2<- data.frame(nrow= nrow (rain), ncol = ncol (rain))
for (i in 1:length (idx3[,1])){
data1<- rainfor[Plot.Code==idx3[i,1] & Census.No==idx3[i,2],] 
dataF2<- rbind (data1[i])
}

但没有任何效果......我的问题是它在dataF2上保持不变!

干杯!!!

1 个答案:

答案 0 :(得分:1)

您在评论中的澄清有所帮助,但可重复的示例总是更好。让我们从头开始:

dataF2<- data.frame(nrow= nrow (rain), ncol = ncol (rain))

这是错误的。我认为您正在尝试创建一个与数据框rain具有相同尺寸的空数据框。如果您检查dataF2,您会发现这与您使用此行所做的相差甚远。如果您阅读函数?data.frame的文档,则很明显没有名为nrowncol的参数。你可能想要的是这样的:

dataF2 <- rain
dataF2[] <- NA

for循环中,您将覆盖整个数据框,因为......您正在覆盖整个数据框。

dataF2<- rain[Plot.Code==idx3[i,1] & Census.No==idx3[i,2],]

这会为dataF2分配内容,完全替换它。如果您只想分配dataF2的{​​em>行,则需要分配到该特定行:

dataF2[i,] <- rain[Plot.Code==idx3[i,1] & Census.No==idx3[i,2],]

我不能绝对保证这会正常工作,因为您没有提供足够详细的示例,所以当您在i上编制索引时,我不确定所有维度是否会正确重合。但这是基本的想法。