이 데이터 프레임을 2007 년 1 월 열 A에 대해 2007 년 1 월/2007 년 평균에 해당하는 비율 행렬로 변환하려고 시도하면 2007 년 2 월에 4/2007 년 평균 ... 모든 항목에 적용해야합니다. 연간 평균 대비 비율
YearM A B C
2007/Jan 3 5 7
2007/Feb 4 5 6
2007/Mar 4 4 2
...........
2013/Dec 4 4 2
이 데이터 프레임을 2007 년 1 월 열 A에 대해 2007 년 1 월/2007 년 평균에 해당하는 비율 행렬로 변환하려고 시도하면 2007 년 2 월에 4/2007 년 평균 ... 모든 항목에 적용해야합니다. 연간 평균 대비 비율
YearM A B C
2007/Jan 3 5 7
2007/Feb 4 5 6
2007/Mar 4 4 2
...........
2013/Dec 4 4 2
library(dplyr)
avg_mat = df %>%
group_by(year = sub("/.*", "", YearM)) %>%
mutate_at(vars(A:C), "mean") %>%
ungroup() %>%
select(A:C) %>%
as.matrix()
mat = df %>%
select(A:C) %>%
as.matrix()
cbind(YearM = df$YearM, as.data.frame(mat/avg_mat))
결과 :
YearM A B C
1 2007/Jan 0.8181818 1.0714286 1.4
2 2007/Feb 1.0909091 1.0714286 1.2
3 2007/Mar 1.0909091 0.8571429 0.4
4 2013/Dec 1.0000000 1.0000000 1.0
데이터 :
df = read.table(text = "YearM A B C
2007/Jan 3 5 7
2007/Feb 4 5 6
2007/Mar 4 4 2
2013/Dec 4 4 2", header = TRUE)
가 여기에 sapply
및 ave
기능을 사용하여 다른 방법입니다. 에서 ave
부분을 빌려 왔습니다.
df$year <- year = sub("/.*", "", df$YearM)
df[,c('A','B','C')] <- df[,c('A','B','C')]/sapply(df[,c('A','B','C')], ave, df$year)
YearM A B C year
1 2007/Jan 0.8181818 1.0714286 1.4 2007
2 2007/Feb 1.0909091 1.0714286 1.2 2007
3 2007/Mar 1.0909091 0.8571429 0.4 2007
4 2013/Dec 1.0000000 1.0000000 1.0 2013
데이터 샘플을 게시하기 위해'dput'을 사용할 수 있습니까? 지금 삽입 한 샘플은 dput 사용법을 알아 낸 – bouncyball
으로 작업하기가 매우 어렵습니다. – jkl
downvote 버튼 – useR