我们说我的数据如下:
> data[295:300,]
Date sulfate nitrate ID
295 2003-10-22 NA NA 1
296 2003-10-23 NA NA 1
297 2003-10-24 3.47 0.363 1
298 2003-10-25 NA NA 1
299 2003-10-26 NA NA 1
300 2003-10-27 NA NA 1
现在我想将所有nitrate
值添加到新的列表/向量中。我使用以下代码:
i <- 1
my_list <- c()
for(val in data)
{
my_list[i] <- val
i <- i + 1
}
但这就是发生的事情:
Warning message:
In x[i] <- val :
number of items to replace is not a multiple of replacement length
> i
[1] 2
> x
[1] NA
我哪里错了?该数据是Coursera R Programming课程的一部分。我可以向你保证,这不是作业/测验。我一直试图了解将循环元素附加到带循环的列表中的最佳方法是什么?我还没有进入课程作业的lapply
或sapply
部分,所以想一想解决方法。
提前致谢。
如果这是一个重复的问题,请指导我。
答案 0 :(得分:2)
正如我们在评论中提到的那样,您不是循环数据框的行,而是循环列(有时也是变量)。因此,循环data$nitrate
。
i <- 1
my_list <- c()
for(val in data$nitrate)
{
my_list[i] <- val
i <- i + 1
}
现在,不是循环使用您的值,更好的方法是使用您希望新向量和旧数据具有相同索引,因此循环索引i
。你怎么告诉R有多少索引?在这里,您可以再次选择多个选项:1:nrow(data)
,1:length(data$nitrate)
以及其他几种方式。下面我给出了一些如何从数据框中提取的例子。
my_vector <- c()
for(i in 1:nrow(data)){
my_vector[i] <- data$nitrate[i] ## Version 1 of extracting from data.frame
my_vector[i] <- data[i,"nitrate"] ## Version 2: [row,column name]
my_vector[i] <- data[i,3] ## Version 3: [row,column number]
}
我的建议:不是将集合称为列表,而是将其称为向量,因为它就是这样。 R中的向量和列表表现略有不同。
当然,实际上您不希望逐个获取数据。一种更有效的数据获取方式是
my_vector2 <- data$nitrate