data.frame 또는 행렬의 행 합계


81

행이 관측 값이고 열이 유전 적 마커 인 매우 큰 데이터 프레임이 있습니다. R을 사용하여 각 관찰에 대해 선택한 열 수의 합계를 포함하는 새 열을 만들고 싶습니다.

200 개의 열과 100 개의 행이있는 경우 43에서 167까지의 열의 합계가있는 100 개의 행이있는 새 열을 만들고 싶습니다. 열에는 1 또는 0이 있습니다. 각 열의 합계를 포함하는 새 열 열, 나는 가장 유전적인 마커를 가진 개인을 분류 할 수있을 것입니다.

나는 그것이 다음과 비슷하다고 느낍니다.

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

답변:


106

당신이 사용할 수있는 rowSums

rowSums(data) 당신이 원하는 것을 줄 것입니다.


16
그리고 OP 문제data$new <- rowSums(data[43:167])
Marek

6
누군가의 시간을 절약하려면 아마도 : rowsum다른 일을하는 기능과 혼동을 피하십시오 !
Augustin

37

rowSums 함수 (Greg가 언급했듯이)는 원하는 작업을 수행하지만 답변에서 부분 집합 화 기술을 혼합하고 있습니다. "[]"를 사용할 때 "$"를 사용하지 마십시오. 코드는 다음과 비슷해야합니다.

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

합계 이외의 함수를 사용하려면 행이나 열에 일반 함수를 적용하려면? apply를 참조하십시오.


왜이 오류가 발생했는지 잘 모르겠습니다. Error in rowSums (incomeData) : 'x'는 숫자 여야합니다
munmunbb

1
@munmunbb, incomeData숫자 가 아니기 때문에 오류가 발생했습니다 . 같은 str(incomeData)것을 사용 하여 그것이 무엇인지 확인한 다음 아마도 숫자 행렬로 변환하십시오.
Greg Snow

5

나는 데이터 테이블의 모든 열에 대한 합계를 얻고 위의 솔루션을 구현하는 문제에 부딪히는 방법을 찾고자 여기에 왔습니다. 모든 열의 합계가있는 열을 추가하는 방법은 다음 cbind함수를 사용합니다 .

cbind(data, total = rowSums(data))

이 방법 total은 데이터에 열을 추가 하고 위의 솔루션을 사용하여 모든 열을 합산하려고 할 때 발생하는 정렬 문제를 방지합니다 (이 문제에 대한 설명은 아래 게시물 참조).

행렬 오류에 새 열 추가


dplyr :: mutate_all 도 참조하십시오 .
Paul Rougieux 2018
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.