Суммирование строк в data.frame или матрице

81

У меня очень большой фрейм данных со строками в качестве наблюдений и столбцами в качестве генетических маркеров. Я хотел бы создать новый столбец, содержащий сумму выбранного количества столбцов для каждого наблюдения с использованием R.

Если у меня 200 столбцов и 100 строк, я хотел бы создать новый столбец, содержащий 100 строк с суммой, скажем, столбцов с 43 по 167. В столбцах есть либо 1, либо 0. С новым столбцом, который содержит сумму каждого ряду, я смогу отсортировать людей, у которых больше всего генетических маркеров.

Я чувствую, что это что-то близкое к:

data$new=sum(data$[,43:167])
user483502
источник

Ответы:

106

вы можете использовать rowSums

rowSums(data) должен дать вам то, что вы хотите.

Грег
источник
16
И для проблемы OPdata$new <- rowSums(data[43:167])
Марек
6
Чтобы сэкономить время, возможно: избегайте путаницы с функцией, rowsumкоторая выполняет что-то еще!
Августин
37

Функция rowSums (как упоминает Грег) будет делать то, что вы хотите, но вы смешиваете методы подмножества в своем ответе, не используйте «$» при использовании «[]», ваш код должен выглядеть примерно так:

data$new <- rowSums( data[,43:167] )

Если вы хотите использовать функцию, отличную от суммы, посмотрите? Apply для применения общих функций к строкам или столбцам.

Грег Сноу
источник
Я не уверен, почему я получил эту ошибку: Ошибка в rowSums (доходДата): 'x' должно быть числовым
munmunbb
1
@munmunbb, вы получили эту ошибку, потому что incomeDataона не числовая. Используйте что-нибудь вроде, str(incomeData)чтобы увидеть, что это такое, а затем, возможно, преобразуйте это в числовую матрицу.
Greg Snow
5

Я пришел сюда в надежде найти способ получить сумму по всем столбцам в таблице данных и столкнуться с проблемами при реализации вышеуказанных решений. Чтобы добавить столбец с суммой по всем столбцам, используется cbindфункция:

cbind(data, total = rowSums(data))

Этот метод добавляет totalстолбец к данным и позволяет избежать проблемы с выравниванием, возникающей при попытке суммирования по ВСЕМ столбцам с использованием вышеуказанных решений (см. Сообщение ниже для обсуждения этой проблемы).

Добавление нового столбца в матрицу ошибки

Seeiespi
источник
См. Также dplyr :: mutate_all .
Paul Rougieux