2013-01-18 1 views
2

data.frame의 일부 열을 더한다면 합이 NA 인 규칙이 필요합니다. 아무 관측도 누락되면 누락 된 경우에만 NA 누락됩니다. colSums(), na.rm = TRUE의 특별한 사용은 하나 이하가 누락 된 경우에만 TRUE가됩니다.

dfn <- data.frame(
a = c(3, 3, 0, 3), 
b = c(1, NA, 0, NA), 
c = c(0, 3, NA, 1)) 

dfn 
    a b c 
1 3 1 0 
2 3 NA 3 
3 0 0 NA 
4 3 NA 1 

, 나는이 같은 일부 데이터가 말해 내가 미만 2 NA 누락 된 열을 내 규칙을 적용하고, 요약. 그래서 나는 이와 같은 것을 얻습니다.

a b c 
1 3 1 0 
2 3 NA 3 
3 0 0 NA 
4 3 NA 1 
5 9 NA 4 

나는 colSums(dfn, na.rm = FALSE)colSums(dfn, na.rm = TRUE)와 주변 연주했습니다. 내 실제 데이터에는 3 개 이상의 열이 있고 4 개 이상의 행이 있습니다. 내가 잃어버린 것을 어떤 식으로 계산하고 그것을 규칙적으로 사용한다고 상상할 수 있습니까?

답변

5

나는 당신이 혼자 colSums이 할 수 있다고 생각하지 않습니다,하지만 당신은 ifelse 사용하여 결과를 추가 할 수 있습니다 : @ 제임스 '응답 문제

colSums(dfn,na.rm=TRUE) + ifelse(colSums(is.na(dfn)) > 1, NA, 0) 
a b c 
9 NA 4 
+0

매력처럼 작동하지만 나는 열린 "+ ifelse"에 대해 몰랐습니다. 고마워요! –

+1

@EricFail이 문맥에서'ifelse'는'colSums'의 결과와 같은 크기의 또 다른 벡터를 생성합니다. 당신은 단지 2 벡터를 함께 추가하고 있습니다. – James

+0

나는 R의 기능을 얼마나 자유롭게 조합 할 수 있는지에 감탄하고있다. 고맙습니다! –

1

아무것도를, 그러나 여기에서 약간 청소기 방법이있다 :

colSums(apply(dfn, 2, function(col) replace(col, match(NA, col), 0))) 
# a b c 
# 9 NA 4 

match(NA, col)replace0으로 대체하고 새 열을 반환, COL에서 처음으로 NA의 인덱스를 반환하고, apply는을 반환에는 모든 새 열이 있습니다.