R : data.frame에서 값을 연결하고 평균화하는 가장 좋은 기능은 무엇입니까?
-
20-09-2019 - |
문제
이 코드의 데이터가 있습니다.
my_df = data.frame("read_time" = c("2010-02-15", "2010-02-15",
"2010-02-16", "2010-02-16",
"2010-02-16", "2010-02-17"),
"OD" = c(0.1, 0.2, 0.1, 0.2, 0.4, 0.5) )
이것을 생성합니다 :
> my_df
read_time OD
1 2010-02-15 0.1
2 2010-02-15 0.2
3 2010-02-16 0.1
4 2010-02-16 0.2
5 2010-02-16 0.4
6 2010-02-17 0.5
나는 각각의 별개의 read_time에 대한 OD 열을 평균화하고 싶습니다 (일부는 복제되어 있습니다. 다른 사람들은 다른 것들은 그렇지 않음) 표준 편차를 계산하여 다음과 같은 테이블을 생성하고 싶습니다.
> my_df
read_time OD stdev
1 2010-02-15 0.15 0.05
5 2010-02-16 0.3 0.1
6 2010-02-17 0.5 0
Data.frame에서 그러한 값을 연결하는 데 가장 적합한 기능은 무엇입니까?
해결책
그만큼 Plyr 패키지는 이것에 인기가 있지만 기본 기능은 by()
그리고 aggregate()
도 도움이 될 것입니다.
> ddply(my_df, "read_time", function(X) data.frame(OD=mean(X$OD),stdev=sd(X$OD)))
read_time OD stdev
1 2010-02-15 0.15000 0.07071
2 2010-02-16 0.23333 0.15275
3 2010-02-17 0.50000 NA
마지막 std.dev에 대해 NA 대신 0을 반환하기 위해 누락 된 비트를 추가 할 수 있습니다.
또한 Data.Frame Construction에있는 인용문 (변수)이 필요하지 않습니다.
다른 팁
패키지 데이터를 시도 할 수 있습니다. MySQL을 알고 있다면 모든 기능을 얻는 것이 매우 쉬워야합니다. 그렇지 않으면 기본 사항도 충분합니다 ;-)
my_dfdt<-data.table(my_df)
mean<-my_dfdt[,mean(OD), by="read_time"]
sd<- ..
또한 한 줄에 가입하거나 마지막에 CBIND, 스타일의 전화로 가입 할 수 있습니다.
또 다른 장점 : 샘플이 큰 경우 매우 빠릅니다. 매우 빠릅니다 ... 문서를 참조하십시오.
이것은 당신이 사용할 수있는 방법을 보여줍니다 aggregate
당신의 평균과 표준 편차를 얻기 위해 read_time
.
>aggregate(my_df$OD, by=list(my_df$read_time), function(x) mean(x))
Group.1 x
1 2010-02-15 0.1500000
2 2010-02-16 0.2333333
3 2010-02-17 0.5000000
>aggregate(my_df$OD, by=list(my_df$read_time), function(x) sd(x))
Group.1 x
1 2010-02-15 0.07071068
2 2010-02-16 0.15275252
3 2010-02-17 NA
제휴하지 않습니다 StackOverflow