Suma wierszy w data.frame lub matrix


81

Mam bardzo dużą ramkę danych z wierszami jako obserwacjami i kolumnami jako markerami genetycznymi. Chciałbym utworzyć nową kolumnę zawierającą sumę wybranej liczby kolumn dla każdej obserwacji przy użyciu R.

Jeśli mam 200 kolumn i 100 wierszy, chciałbym utworzyć nową kolumnę zawierającą 100 wierszy z sumą, powiedzmy, kolumn od 43 do 167. Kolumny mają 1 lub 0. Nowa kolumna zawierająca sumę każdego z nich wiersz, będę mógł posortować osoby, które mają najwięcej markerów genetycznych.

Czuję, że jest to coś bliskiego:

data$new=sum(data$[,43:167])

Odpowiedzi:


106

możesz użyć rowSums

rowSums(data) powinien dać ci to, czego chcesz.


16
A dla problemu OPdata$new <- rowSums(data[43:167])
Marek

6
Być może, aby zaoszczędzić komuś czas: unikaj pomyłki z funkcją, rowsumktóra robi coś innego!
Augustin

37

Funkcja rowSums (jak wspomina Greg) zrobi, co chcesz, ale w swojej odpowiedzi mieszasz techniki podzestawiania, nie używaj "$" podczas używania "[]", twój kod powinien wyglądać mniej więcej tak:

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

Jeśli chcesz użyć funkcji innej niż suma, spójrz na zastosowanie funkcji ogólnych w wierszach lub kolumnach.


Nie jestem pewien, dlaczego otrzymałem ten błąd: Błąd w rowSums (dochodData): `` x '' musi być numeryczne
munmunbb

1
@munmunbb, otrzymałeś ten błąd, ponieważ incomeDatanie jest on numeryczny. Użyj czegoś takiego, jak, str(incomeData)aby zobaczyć, co to jest, a następnie prawdopodobnie przekonwertuj to na macierz numeryczną.
Greg Snow

5

Przyszedłem tutaj z nadzieją, że znajdę sposób na uzyskanie sumy we wszystkich kolumnach tabeli danych i napotkam problemy implementujące powyższe rozwiązania. Sposobem dodania kolumny z sumą we wszystkich kolumnach jest cbindfunkcja:

cbind(data, total = rowSums(data))

Ta metoda dodaje totalkolumnę do danych i pozwala uniknąć problemu z wyrównaniem wynikającego z próby sumowania we WSZYSTKICH kolumnach przy użyciu powyższych rozwiązań (zobacz poniższy post, aby zapoznać się z omówieniem tego problemu).

Dodanie nowej kolumny do błędu macierzy


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.