写一个循环来切片R中的矩阵

时间:2018-03-22 21:34:51

标签: r loops slice

我有一个非常基本的循环问题:

我有一个矩阵(365x20)。因此,二十年来我每天都有降雨数据。

我需要对矩阵进行切片以进行分析的后续步骤,我这样做了:

year1 <- as.vector(Rainfall_data$year1)                   
year2 <- as.vector(Rainfall_data$year2)             
...         
year20 <- as.vector(Rainfall_data$year20)

这总共给了我20个单个1x365向量。

现在,我想对转换的降雨数据做同样的事情,以获得包含所有二十年当天价值的向量。因为这意味着要做

as.vector(t_Rainfall_data$day1-365)

我想写一个循环。这些列称为day1到day 365. t_Rainfall_data将是转置矩阵。主要目标是总共获得365个单个1x20向量。

我尝试了几种方法,但都失败了。

1 个答案:

答案 0 :(得分:0)

评论是正确的:您要对向量day1执行的任何操作都可以使用t_Rainfall_data$day1(或可能使用Rainfall_data[1,])完成,最好将切片放入当你用它做某事而不是从中创建大量冗余向量时,数据帧。同样,即使您需要一堆对象,处理对象列表也几乎总是比创建单独的命名对象更容易。所有这一切,这里是如何得到你所要求的:

与注释一样,您可以使用

返回向量列表
lapply(seq_len(nrow(Rainfall_data)), function(i) Rainfall_data[i, ])

如果您更喜欢循环,并创建对象而不是返回列表,您可以执行类似

的操作
for(i in 1:nrow(Rainfall_data){
  assign(paste0("day",i),as.vector(t_Rainfall_data[,paste0("day",i)]))
  }

assign将创建一个以传递给它的字符串命名的对象,该对象包含第二个参数。