2016-01-29 2 views
0

У меня есть df(A) с 10 колонками и 300 строк. Мне нужно подвести каждые два столбца, между ними, таким образом:Сумма столбца каждый n столбцов в кадре данных R

A[,1]+A[,2] = # first result 
A[,3]+A[,4] = # second result 
A[,5]+A[,6]= # third result 
.... 
A[,9]+A[,10] # last result 

Ожидаемый конечный результат является новым dataframe с 5 колонной и 300 строки. Любой способ сделать это? с tapply или петлей for? Я знаю, что я могу попробовать с на пример, но я ищу быстрый метод Спасибо вам

ответ

2

Мы могли бы использовать sapply:

df <- data.frame(replicate(expr=rnorm(100),n = 10)) 
sapply(seq(1,9,by=2),function(i) rowSums(df[,i:(i+1)])) 
1

Это немного загадочное, но я это должно быть быстрым , Мы добавляем каждый столбец в соседний столбец. Затем удалите ненужные результаты с c(T,F), который перерабатывает через нечетные столбцы:

(A[1:(ncol(A)-1)] + A[2:ncol(A)])[c(T,F)] 
4

Вы можете сделать это без * Применение петель.

Образец данных:

df <- head(iris[-5]) 
df 
# Sepal.Length Sepal.Width Petal.Length Petal.Width 
#1   5.1   3.5   1.4   0.2 
#2   4.9   3.0   1.4   0.2 
#3   4.7   3.2   1.3   0.2 
#4   4.6   3.1   1.5   0.2 
#5   5.0   3.6   1.4   0.2 
#6   5.4   3.9   1.7   0.4 

Теперь вы можете использовать вектор утилизации логические выражения:

df[c(TRUE,FALSE)] + df[c(FALSE,TRUE)] 
# Sepal.Length Petal.Length 
#1   8.6   1.6 
#2   7.9   1.6 
#3   7.9   1.5 
#4   7.7   1.7 
#5   8.6   1.6 
#6   9.3   2.1 
+0

Это добавляет первую группу столбцов на второй вместо того, что было описано выше –

+0

Это хороший решение. –

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