[英]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.