2017-05-09 1 views
2

나는이 같은 데이터 세트가 있다고 가정결정하는 주파수

id <- c(1,1,1,2,2,3,3,4,4) 
visit <- c("A", "B", "C", "A", "B", "A", "C", "A", "B") 
test1 <- c(12,16, NA, 11, 15,NA, 0,12, 5) 
test2 <- c(1,NA, 2, 2, 2,2, NA,NA, NA) 
df <- data.frame(id,visit,test1,test2) 

내가 최종 출력이 같이 보입니다 있도록 테스트 PER 방문 당 데이터 포인트의 수를 알고 싶어요 이 :이 older post에 언급 한 바와 같이

visit test1 test2 
A  3  3 
B  3  1 
C  1  1 

는 내가 1 개 변수에 대해 다음과 같이 집계 함수를 사용할 수 있습니다 알고

aggregate(x = df$id[!is.na(df$test)], by = list(df$visit[!is.na(df$test)]), FUN = length) 
,

하지만 여러 테스트에서 어떻게해야합니까?

답변

2

또한 data.table를 사용할 수있는 열 유연한 숫자에 유용 할 수있는 :

cols <- names(df)[grepl("test",names(df))] 
setDT(df)[,lapply(.SD, function(x) sum(!is.na(x))), by = visit, .SDcols = cols] 

df 
# visit test1 test2 
#1:  A  3  3 
#2:  B  3  1 
#3:  C  1  1 
2

기본 R에 tablerowSums 사용 :

cols <- 3:4  
sapply(cols, function(i) rowSums(table(df$visit, df[,i]), na.rm = TRUE)) 

# [,1] [,2] 
#A 3 3 
#B 3 1 
#C 1 1 
+0

안녕하세요! 그러나 그것은 여전히 ​​모든 테스트를 나열해야합니다. df [3 : 4]와 같은 것을주는 것으로 이것을하는 방법을 알고 있습니까? – Sheila

+0

@Sheila updated ..... – 989

+0

관심있는 열과 함께'cols'를 설정할 수 있습니다. – 989