티스토리 뷰

집단별로 함수 적용하기

1. 벡터(집단을 알려주는 벡터를 사용)

v = 1:12 # 자료

g = c(rep(1,9), rep(2,3) # 집단 소속을 알려주는 벡터

# c(rep(1,9), rep(2,3))=c(1,1,1,1,1,1,1,1,1,2,2,2)

tapply(v, INDEX = g, FUN=sum)# 집단 별로 구성원에 대해 sum을 적용

g2 = c(rep("M",9), rep("F",3)) # 또다른 벡터 : 집단 소속을 알려줌.

tapply(v, INDEX = g2, FUN=mean)

# g2에 따라 결정된 집단별로 구성원에 대해 mean을 적용

 

2. 매트릭스(행 또는 열별로 함수 적용)

m=matrix(1:12, nrow=3)

 

apply(m, FUN=mean, 1) # 같은 행끼리

apply(m, FUN=mean, 2) # 같은 열끼리

 

3. 리스트(원소별로 함수 적용)

l=list(c(1,2,3,4,5), c(6,7,8), c(9,10,11,12))

# 리스트 l3개의 원소로 이루어졌으며, 첫 번째 원소는 c(1,2,3,4,5)

# 두 번째 원소는 c(6,7,8), 세 번째 원소는 c(9,10,11,12)

 

lapply(l, FUN=mean) # 리스트의 원소들끼리

sapply(l, FUN=mean) # lapply and Simplify to a vector

 

4. 데이터 프레임(집단을 알려주는 벡터를 사용. 각 열별로 함수 적용)

b <- read.fwf("winner.txt",c(3,-1,20))

print(b, quote=T)

b$V2 <- gsub("^\\s+|\\s+$", "", b$V2)

b$V3 = sub("^\\s*(\\w+)\\s+.*", "\\1", b$V2)

 

aggregate(b, by=list(b$V3), FUN=length)

cf) table(b$V3)

 

aggregate(b, by=list(b$V3), FUN=list)

 

b$V1 = as.character(b$V1)

bAggr = aggregate(b, by=list(b$V3), FUN=list)

bAggr2 = aggregate(bAggr, by=list(c(1,1,2,3,4,5,5,6,7,8,9,10,11)),

FUN=function(x) { list(unlist(list(x))) } )

 

bAggr[, 1:2]; bAggr2[, 1:3]



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함