당신은 여전히 사용할 수 있습니다 tapply
여기:
do.call(rbind,
tapply(seq_len(ncol(dat)),a1,
function(i)rowMeans(dat[,i])))
문제
죄송합니다. 저는 나무만 보고 숲을 볼 수 없습니다.많이 검색했지만 해결책을 찾지 못했습니다.예를 들어, 나는 모든 단위(잠재적으로는)에 대한 평균을 원합니다. rowMeans
) 행렬(또는 잠재적으로 데이터프레임)에 있는 변수의 하위 집합 R
.다음과 같이 인덱싱 벡터를 사용하여 열을 선택하고 싶습니다. tapply
, 내가 전화한 것 a1
아래 예에서.
> set.seed(23958)
> (dat <- matrix(sample(0:3, 10, replace = TRUE), ncol = 5))
[,1] [,2] [,3] [,4] [,5]
[1,] 2 3 0 2 1
[2,] 2 1 1 2 1
> set.seed(6112)
> (a1 <- sample(1:2, 5, replace = TRUE))
[1] 1 1 2 2 1
이 예의 솔루션은 다음과 같아야 하지만 물론 더 포괄적인 방식으로 수행하고 싶습니다.나는 apply
가족이지만 어느 가족인지 알 수 없었습니다.
> cbind(rowMeans(dat[, a1 == 1]), rowMeans(dat[, a1 == 2]))
[,1] [,2]
[1,] 2.000000 1.0
[2,] 1.333333 1.5
해결책
당신은 여전히 사용할 수 있습니다 tapply
여기:
do.call(rbind,
tapply(seq_len(ncol(dat)),a1,
function(i)rowMeans(dat[,i])))
다른 팁
만약 너라면 t
데이터를 변경하면 사용할 수 있습니다 by
:
t(do.call(rbind,by(t(dat),a1,colMeans)))
1 2
V1 2.000000 1.0
V2 1.333333 1.5
당신은 또한 사용할 수 있습니다 aggregate
기능:
t(aggregate(t(dat), list(a1), mean))