Добавление строк и применение его к фрейму данных в R
У меня есть дф:
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. Буду признателен за вашу помощь.
Спасибо
2 ответа
Мы можем зациклить последовательность (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]))