1

我有一个df:

Q1_3  Q2_3  Q3_3  Q4_3  Q5_3 ...  
16.01  8.23 18.13 11.14 18.03 ...  
17.25  7.50 11.72 10.84  7.24 ...  
3.08  2.12  4.39  3.16  2.44 ...    
4.94  3.95  6.87  3.75  4.10 ...  
3.89  8.35  7.80  2.90  2.55 ...  

我想创建一个函数,依次添加 df[1:5]、[6:10] 等并将其应用于整个数据帧。

fun1<- function(x) c(x[1] + x[2], x[3] + x[4], x[5] + x[6], x[7] + x[8], x[9] + x[10], x[11] + x[12], x[13] + x[14]) 

我用这个来做另一个我需要的,但是我认为应该有一种方法可以使用 seq() 或 rep() 并将其应用于整个 df。

testfun<- function(x) c(rowSums(x[1:5])) 

这增加了我需要的列,但是我无法弄清楚如何为整个 df 排序。我会很感激你的帮助。

谢谢

4

2 回答 2

2

我们可以遍历序列seq(1, ncol(df1), by =5)i:(i+4)rowSumscbind

cbind(df1, sapply(seq(1, ncol(df1), by=5), function(i)
                rowSums(df1[i:pmin((i+4), ncol(df1))], na.rm=TRUE)))

如果我们需要一个函数

f1 <- function(dat, n=5){
       cbind(dat, sapply(seq(1, ncol(dat), by = n), function(i)
             rowSums(dat[i:pmin((i+(n-1)), ncol(dat))], 
               na.rm=TRUE)))
       }
f1(df1) 
于 2015-11-20T12:54:16.790 回答
1
 n <- 5
 g <- as.numeric(gl(ncol(df1), n, ncol(df1)))
 e2 <- t(aggregate(t(as.matrix(df1))~ g, FUN=sum)[,-1])
 cbind(df1, e2)

1. 构造一个因子来对列进行分组。
2. 聚合转置后的数据帧
3.cbind()

更短一点:

n <- 5
g <- as.numeric(gl(ncol(df1), n, ncol(df1)))
e2 <- aggregate(t(df1)~ g, FUN=sum)
cbind(df1, t(e2[-1]))

作为函数:

f <- function(df, n=5) {
    g <- as.numeric(gl(ncol(df), n, ncol(df)))
    aggregate(t(df)~ g, FUN=sum)
}
cbind(df1, t(f(df1)[-1]))
于 2015-11-20T13:02:57.463 回答