2013-05-09 6 views
2

나는이 data.frame을 가지고 있습니다. 내가해야 할 일은 같은 종류의 데이터를 가진 다른 모든 열의 수단으로 2 개의 추가 열을 만드는 것입니다. 여기 r에있는 다른 열의 평균을 계산하는 방법은 무엇입니까?

파일의 dput(head())입니다

  structure(list(COLE_CODIGO_COLEGIO = c(182L, 3046L, 3327L, 3418L, 
3459L, 3525L), Utilidad12.1 = c(5.67960793875611e+84, 6.70878394856429e+83, 
3.10783852265787e+84, 1.80000434506295e+84, 7.92256239238555e+84, 
2.6032583906869e+83), genero.x = c(0.581395348837209, 0.525423728813559, 
0.636363636363636, 0.55, 0.488636363636364, 0.63768115942029), 
    Utilidad11.1 = c(1.15336934758534e+73, 3.77916671655328e+72, 
    4.7319512062371e+73, 7.97038534283783e+72, 1.32237182934735e+73, 
    6.55595718179632e+72), genero.y = c(0.527472527472527, 0.616666666666667, 
    0.526315789473684, 0.560975609756098, 0.450704225352113, 
    0.742268041237113), Utilidad10.1 = c(5.09613856124168e+72, 
    5.25727948275145e+71, 1.4350276514895e+72, 7.04968791434072e+72, 
    5.97923875650689e+72, 4.30547735977066e+72), genero.x = c(0.566371681415929, 
    0.315789473684211, 0.571428571428571, 0.578947368421053, 
    0.353658536585366, 0.743243243243243), Utilidad07.1 = c(1.401355333064e+71, 
    1.35282220680438e+71, 9.87359187347488e+71, 1.89236591312778e+72, 
    1.18195124980311e+73, 5.99279404969151e+70), genero.y = c(0.534883720930233, 
    0.522727272727273, 0.5, 0.560975609756098, 0.411764705882353, 
    0.714285714285714), Utilidad06.1 = c(4.47939696971958e+72, 
    2.91946645871643e+72, 3.16785158272574e+72, 1.16889985482301e+74, 
    5.83958109398712e+74, 5.37640536403147e+71), genero = c(0.5, 
    0.6, 0.357142857142857, 0.5, 0.422680412371134, 0.695652173913043 
    )), .Names = c("COLE_CODIGO_COLEGIO", "Utilidad12.1", "genero.x", 
"Utilidad11.1", "genero.y", "Utilidad10.1", "genero.x", "Utilidad07.1", 
"genero.y", "Utilidad06.1", "genero"), row.names = c(NA, 6L), class = "data.frame") 

나는 이름이 거기에 이름이 "Utilidad"와 다른 모든 컬럼의 평균이다 "MeanUtilidad"로 열을 만들 것입니다 무엇을 의미 . 그리고 그 안에 "genera"라는 이름을 가진 모든 다른 변수에 대한 평균을 포함하는 "Meangenero"라는 이름의 컬럼.

필자는 문제를 충분히 드러내기를 바랍니다.

다음 코드를 사용해 보았습니다. Semestre1["UProm"]<-apply(Semestre1 [ ,2:dim(Semestre1)[2]],1,mean, na.rm=T)하지만 모든 열을 의미하고 있으며 모든 특정 열을 선택하는 방법을 생각할 수 없습니다.

답변

4

당신은 다음과 같이 수행 할 수 있습니다

dat$MeanUtilidad <- rowMeans(dat[grep("Utilidad", names(dat), value = TRUE)]) 
dat$MeanGenero <- rowMeans(dat[grep("genero", names(dat), value = TRUE)]) 
+0

이 작은 예를 들어 Reduce('+', list)

예를 rowMeans에 대한

nUtilidad <- grep("Utilidad", names(dat), value = TRUE) nGenero <- grep("genero", names(dat), value = TRUE) dat$MeanUtilidad <- Reduce('+', dat[nUtilidad])/length(nUtilidad) dat$MeanGenero <- Reduce('+', dat[nGenero])/length(nGenero) 

벤치마킹을 사용할 수 있습니다! – MJAS

1

rowMeans는 매트릭스에 입력을 강요합니다. 당신이 완벽 덕분에 속임수를 썼는지

library(microbenchmark) 
microbenchmark(Reduce(`+`,dat[nUtilidad])/length(nUtilidad), rowMeans(dat[nUtilidad])) 
## Unit: microseconds 
##           expr  min  lq median  uq  max neval 
## Reduce(`+`, dat[nUtilidad])/length(nUtilidad) 75.561 77.6105 79.2025 80.4055 451.967 100 
##      rowMeans(dat[nUtilidad]) 178.477 179.9305 180.9955 182.6255 321.482 100 
관련 문제