R中数据帧中越来越多列的总和

R中数据帧中越来越多列的总和,r,R,我需要逐行提取data.frame的求和子集,并使用输出返回新的data.frame。但是,我希望每次将要求和的列数增加4。例如,我想自己提取第一列,然后逐行提取第2列到第6列的总和,然后是第7列到第15列,依此类推 我有一段代码,它返回一个data.frame中固定数量的列与一个新data.frame中的最大尝试次数之和-我只需要找到一种方法来添加升级函数 t<- max(as.numeric(df[,c(5)])) process.row <- function (x){

我需要逐行提取data.frame的求和子集,并使用输出返回新的data.frame。但是,我希望每次将要求和的列数增加4。例如,我想自己提取第一列,然后逐行提取第2列到第6列的总和,然后是第7列到第15列,依此类推

我有一段代码,它返回一个data.frame中固定数量的列与一个新data.frame中的最大尝试次数之和-我只需要找到一种方法来添加升级函数

t<- max(as.numeric(df[,c(5)]))

process.row <- function (x){
  sapply(1:t,function(i){
return(sum(as.numeric(x[c((6+(i-1)*5):(10+(i-1)*5))] 
)
)
)
 })
}

t(apply(df,1,process.row)) -> collated.data

我一直在努力想办法做到这一点,所以非常感谢你的帮助。我在别处找不到这个问题的答案,因此如果我遗漏了什么,我深表歉意。

您要查找的是一个函数,它给出了序列的较低值x,序列的第一部分如下:

在r中,代码如下所示:

# the foo part of the function
foo <- function(x) ifelse(x > 0, 1 + (x - 1) * 4, 0)

# the wrapper of the function 
min.val <- function(i){
  ifelse(i == 1, 1, 1 + sum(sapply(1:(i - 1), foo)))
}

# takes only one value
min.val(1)
# [1] 1
min.val(2)
# [1] 2
min.val(3)
# [1] 7

# to calculate multiple values, use it like this
sapply(1:5, min.val)
#[1]  1  2  7 16 29
如果希望获得最大值,可以创建另一个函数,如下所示

max.val <- function(i) min.val(i + 1) - 1
sapply(1:5, max.val)
#[1]  1  6 15 28 45
测试:
这是您想要的吗?

我想您想要对所选列子集的行求和。如果是这样,也许这会有所帮助

# fake data
mydf <- as.data.frame(matrix(sample(45*5), nrow=5))
mydf

# prepare matrix of start and ending columns
n <- 20
i <- 1:n
ncols <- 1 + (i-1)*4
endcols <- cumsum(ncols)
startcols <- c(1, cumsum(ncols[-length(endcols)])+1)
mymat <- cbind(endcols, startcols)

# function to sum the rows
myfun <- function(df, m) {
  # select subset with end columns within the dimensions of the given df
  subm <- m[m[, 2] <= dim(df)[2], ]
  # sum up the selected columns of df by rows
  sapply(1:dim(subm)[1], function(j) 
    rowSums(df[, subm[j, 1]:subm[j, 2], drop=FALSE]))
}

mydf
myfun(df=mydf, m=mymat)

你的process.row function.Thank中有输入错误。我想我已经更正了。我想这给出了列数,但我仍然不确定如何求和?不过,上述答案对我来说很有效。谢谢你的帮助!
# fake data
mydf <- as.data.frame(matrix(sample(45*5), nrow=5))
mydf

# prepare matrix of start and ending columns
n <- 20
i <- 1:n
ncols <- 1 + (i-1)*4
endcols <- cumsum(ncols)
startcols <- c(1, cumsum(ncols[-length(endcols)])+1)
mymat <- cbind(endcols, startcols)

# function to sum the rows
myfun <- function(df, m) {
  # select subset with end columns within the dimensions of the given df
  subm <- m[m[, 2] <= dim(df)[2], ]
  # sum up the selected columns of df by rows
  sapply(1:dim(subm)[1], function(j) 
    rowSums(df[, subm[j, 1]:subm[j, 2], drop=FALSE]))
}

mydf
myfun(df=mydf, m=mymat)