2015-11-20 8 views
1

У меня есть ДФ:Добавление строк и применяя его к кадру данных в 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 ... 

я хотел бы создать функцию, которая последовательно добавляет ФР [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() или Реп() и применить его ко всей ФР.

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

это добавляет столбцы, которые мне нужны, но я не могу понять, в какой последовательности это для всей ФР. Буду признателен за вашу помощь.

Благодаря

ответ

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) 
+0

Я думаю, что это один работает хорошо! Мне просто нужно включить его в функцию, чтобы я мог применить ее и к другим фреймрам данных! Большое спасибо –

+0

@CsabaSzabo На этой основе легко создать функцию. Я обновлю – akrun

+0

Спасибо большое @akrun, что спасает мою жизнь! Что мне нужно добавить к функции для подмножества только результата в выходе без репликации предыдущих переменных? –

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. Совокупная транспонированная dataframe
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])) 
+0

Я не уверен, что это возвращает tbh, поскольку у меня есть тот же ncol, что и исходный df, но не знаю, какие переменные в них ... Я должен иметь ncol/5 в качестве выходного значения, поскольку каждый пятый столбец добавлено ... –

+0

Я построил другое решение, которое дает желаемый результат. – jogo

+0

e2 == f1 (df) возвращает все true! :)) Большое спасибо @jogo, это тоже работает :) –

 Смежные вопросы

  • Нет связанных вопросов^_^