繁体   English   中英

添加行并将其应用于R中的数据框

[英]Adding rows and applying it to a data frame in R

我有一个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排序。 我很感激你的帮助。

谢谢

我们可以遍历序列( seq(1, ncol(df1), by =5) ),创建索引( i:(i+4) ),对数据集进行子集,执行rowSums ,然后使用原始数据集进行cbind

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) 
 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]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM