행 단위로 집계하고 싶습니다. 나는 이것을하는 법을 알고 있으며 다른 사람들로부터 몇 가지 질문에 답해주었습니다. 그러나 집계 수식을 일반화하고 집계 된 행을 원본 데이터 집합에 처음 나타나는 것과 다른 순서로 배치하지 않는 것이 이상적입니다. 여기 행으로 일반화 된 집합체
는 예시적인 세트이다my.data <- read.table(text = '
0 0 0 1
0 0 0 1
2 2 2 2
2 2 2 2
0 4 0 0
0 4 0 0
2 2 0 0
2 2 0 0
2 2 0 0
2 2 0 0
', header = FALSE)
내 원하는 결과 : 행은 원래의 순서대로되어 있지이라도 여기
desired.result <- read.table(text = '
0 0 0 1 2
2 2 2 2 2
0 4 0 0 2
2 2 0 0 4
', header = FALSE)
답을 얻을 수있는 한 가지 방법이있다 :
my.data[,(ncol(my.data)+1)] = 1
aggregate(V5 ~ V1 + V2 + V3 + V4, FUN = sum, data=my.data)
V1 V2 V3 V4 V5
1 2 2 0 0 4
2 0 4 0 0 2
3 0 0 0 1 2
4 2 2 2 2 2
다음은 집계 수식 일반화에 실패한 시도입니다.
with(my.data, aggregate(my.data[,ncol(my.data)], by = list(paste0('V', seq(1, ncol(my.data)-1))), FUN = sum))
결과의 순서는 일반화보다 덜 중요합니다.
감사합니다.
"generalize"라고하면 집계 (V5 ~., my.data, sum)와 같은 의미입니까? –
@alexis_laz 무슨 뜻인지 모르겠다. 코드가 실행되지 않습니다. 나는 원하는 결과를 제공했다. 내가 어떻게 설명 할 수 있는지 알려주십시오. 또한 V5는 일반화되지 않았습니다. 5 개의 기둥이있는 경우에만 적용됩니다. –
죄송합니다. 예제 데이터 세트에서 "V5"를 부여한 것으로 간주했습니다. 빈도 카운트를 찾고 있다면'aggregate' 대신에'table'을 사용할 수 있습니까? 아니면 단순한 문제입니까? 예 : 'tmp = do.call (paste, my.data); data.frame (unique (my.data), unclass (table (factor, tmp, unique (tmp)))))' –