1

我有一个使用尺寸为 130、395 的 read.csv() 创建的数据结构。我试图逐行迭代数据并返回一个向量,其中包含以 5 为增量的每行总和列表的列表(仅从数据[,13:395])。我编写了以下代码,但它返回一个向量,其总和超过 5 列的间隔,它也是一个无限循环。换句话说,我试图弄清楚如何使这段代码有限并按行工作。

data <- read.csv(file = "Table.csv")
indexes <- c(13:395)
counter <- 0
a <- c()
list <- c()

for(line in data){
    for(index in indexes){
        while(counter<5){
            a <- c(a, line[index])
            counter = counter + 1
            }
        list <- c(list, sum(a, na.rm = TRUE))
        counter = 0
        a = c()
        }
    }

谢谢你的帮助

4

2 回答 2

1

这个怎么样?

library(zoo)
d <- as.data.frame(matrix(1:100,nrow = 4))
> t(apply(d,1,function(x) { rollapply(x,width = 5,FUN = "mean",align = "left") }))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
[1,]    9   13   17   21   25   29   33   37   41    45    49    53    57    61    65    69    73    77    81    85
[2,]   10   14   18   22   26   30   34   38   42    46    50    54    58    62    66    70    74    78    82    86
[3,]   11   15   19   23   27   31   35   39   43    47    51    55    59    63    67    71    75    79    83    87
[4,]   12   16   20   24   28   32   36   40   44    48    52    56    60    64    68    72    76    80    84    88
     [,21]
[1,]    89
[2,]    90
[3,]    91
[4,]    92

出于您的目的,您只会传递列13:365(即类似于d[,13:365]而不是只是d)。

我现在看到我使用mean而不是sum错误地使用,但这种改变很容易做出。

于 2012-06-22T16:24:42.443 回答
0

你的意思可能是这样的:

lapply(1:nrow(data),function(i) rowSums(data[i:min(i+5,nrow(data)),13:395]))

使用内置数据集的初始结果是:

 head(lapply(1:nrow(mtcars),function(i) rowSums(mtcars[i:min(i+5,nrow(mtcars)),])))
[[1]]
        Mazda RX4     Mazda RX4 Wag        Datsun 710    Hornet 4 Drive 
          328.980           329.795           259.580           426.135 
Hornet Sportabout           Valiant 
          590.310           385.540 

[[2]]
    Mazda RX4 Wag        Datsun 710    Hornet 4 Drive Hornet Sportabout 
          329.795           259.580           426.135           590.310 
          Valiant        Duster 360 
          385.540           656.920 

[[3]]
       Datsun 710    Hornet 4 Drive Hornet Sportabout           Valiant 
          259.580           426.135           590.310           385.540 
       Duster 360         Merc 240D 
          656.920           270.980 

[[4]]
   Hornet 4 Drive Hornet Sportabout           Valiant        Duster 360 
          426.135           590.310           385.540           656.920 
        Merc 240D          Merc 230 
          270.980           299.570 

[[5]]
Hornet Sportabout           Valiant        Duster 360         Merc 240D 
           590.31            385.54            656.92            270.98 
         Merc 230          Merc 280 
           299.57            350.46 

[[6]]
   Valiant Duster 360  Merc 240D   Merc 230   Merc 280  Merc 280C 
    385.54     656.92     270.98     299.57     350.46     349.66
于 2012-06-22T17:38:44.383 回答