R-按行和5人一组的总和迭代csv文件

R-按行和5人一组的总和迭代csv文件,r,csv,row,infinite-loop,R,Csv,Row,Infinite Loop,我有一个使用read.csv()创建的数据结构,维度为130395。我试图逐行遍历数据,并返回一个向量,该向量包含每行总和的列表,增量为5(仅来自数据[,13:395])。我已经编写了下面的代码,但它返回一个向量,每个列的和间隔为5,它也是一个无限循环。换句话说,我正试图弄清楚如何使这段代码有限并按行运行 data <- read.csv(file = "Table.csv") indexes <- c(13:395) counter <- 0 a <- c() list

我有一个使用read.csv()创建的数据结构,维度为130395。我试图逐行遍历数据,并返回一个向量,该向量包含每行总和的列表,增量为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()
        }
    }
data这个怎么样

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
图书馆(动物园)
dt(应用(d,1,函数(x){rollappy(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
,但是这种改变很容易做出。

这个怎么样

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
图书馆(动物园)
dt(应用(d,1,函数(x){rollappy(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
,但这种改变很容易做出。

你的意思可能是这样的:

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

你的意思可能是这样的:

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

这里有几个问题我可以问,但我们将从以下问题开始:当您在给定的行中达到索引391时,您预计会发生什么?在这种情况下,前面没有5个值需要添加。将最后4个值相加,然后转到下一行。我可以在这里问几个问题,但我们将从以下问题开始:当您在给定行中达到索引391时,您预计会发生什么?在这种情况下,前面没有5个值需要添加。将最后四个值相加,然后移到下一行。我从未使用过pkg zoo,也不太确定输出是什么,您能解释一下这个矩阵包含什么吗?如果它包含[在csv中]单元格的值,似乎会很有用,因为这样我可以对矩阵中的值求和。@AidanQuinn每行包含
d
中每行5个值的每个连续组的平均值。要进行求和,只需将
FUN=“mean”
替换为
FUN=“sum”
。(另外,您上面的示例代码显示了大量新的R用户遇到的经典错误,这些错误会让您非常不高兴。这是一个很好的参考。)谢谢,我明白了。当我运行它时,它似乎仍然是按列求和,而不是按行求和,但我将继续处理它。也谢谢你的参考。@AidanQuinn如果你仔细检查我的示例,你会发现它确实是按行运行的。请注意,
d
的第一列是1,2,3,4,这些值的平均值肯定不是9,即输出的1,1项。我从未使用过pkg zoo,也不太确定输出是什么,您能解释一下这个矩阵包含什么吗?如果它包含[在csv中]单元格的值,似乎会很有用,因为这样我可以对矩阵中的值求和。@AidanQuinn每行包含
d
中每行5个值的每个连续组的平均值。要进行求和,只需将
FUN=“mean”
替换为
FUN=“sum”
。(另外,您上面的示例代码显示了大量新的R用户遇到的经典错误,这些错误会让您非常不高兴。这是一个很好的参考。)谢谢,我明白了。当我运行它时,它似乎仍然是按列求和,而不是按行求和,但我将继续处理它。也谢谢你的参考。@AidanQuinn如果你仔细检查我的示例,你会发现它确实是按行运行的。请注意,
d
的第一列是1,2,3,4,这些值的平均值肯定不是9,即输出的1,1条目。