R-按行和5人一组的总和迭代csv文件
我有一个使用read.csv()创建的数据结构,维度为130395。我试图逐行遍历数据,并返回一个向量,该向量包含每行总和的列表,增量为5(仅来自数据[,13:395])。我已经编写了下面的代码,但它返回一个向量,每个列的和间隔为5,它也是一个无限循环。换句话说,我正试图弄清楚如何使这段代码有限并按行运行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
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条目。