2016-10-28 2 views
0

현재 저는 한 해 동안 데이터를보고있는 프로젝트에서 작업하고 있습니다. 그것은 각 나라와 년 조합이 유일한 경우입니다. 모든 변수를 거쳐 매년마다 계산을 실행하는 루프를 만들고 싶습니다. 현재 R에서 data.table을 사용하여 각 개별 변수에 대해이 작업을 수행 할 수 있습니다. 예 :R 행의 열 적용 범위를 표시하는 루프를 만드는 방법

DT[, list(total = sum(v_23_27 !=99999)), by = ID_year]' 

모든 조언을 제공해 주시면 감사하겠습니다.

편집 :

나는 데이터 집합의 범위를 확인하기 위해 비 NA 사례를 찾고 있어요. 아래의 데이터 예 :

Year Country Var1 Var2 
2001 Canada NA NA 
2001 USA  .32 NA 
2001 Sweden NA 1 
2002 Canada .1 NA 
2002 USA .32 1 
2002 Sweden NA 1 
+0

무엇을 계산합니까? – ulfelder

+0

데이터 예제를 추가하십시오. – Ansjovis86

+0

이것은 현재 명확하지 않습니다. 아마도 당신은'DT [, list (total = sum (v_23_27! = 99999)), by = list (ID_year, ID_country)]' –

답변

0

dplyr과 같이 입력 할 수 있습니다.

# make toy data 
set.seed(20912) 
df <- data.frame(country = c(rep("A", 5), rep("B", 5)), 
       year = rep(seq(1995,1999), 2), 
       var1 = rnorm(10, 100, 20), 
       var2 = sample(c("lo", "hi", NA), 10, replace = TRUE), 
       stringsAsFactors = FALSE) 

library(dplyr) 

# create function for counting non-NA values 
noNAsum <- function(x) { sum(!is.na(x)) } 

# group the data by year and then apply the function to each column of interest 
df %>% 
    group_by(year) %>% 
    summarise_each(funs(noNAsum), var1:var2) 

# A tibble: 5 × 3 
    year var1 var2 
    <int> <int> <int> 
1 1995  2  1 
2 1996  2  2 
3 1997  2  0 
4 1998  2  2 
5 1999  2  2 

당신이 다른 컬럼에 대해 서로 다른 규칙을 사용하려면

, 당신은 그것을 수용 할 수 summarize에 대한 호출을 확장 할 수, 예를 들면 :

여기에 매년 각 열에 대한 비 NA 값을 계산 것이다 버전입니다
df %>% 
    group_by(year) %>% 
    summarise(var1 = sum(var1 > 100), 
      var2 = sum(!is.na(var2))) 

# A tibble: 5 × 3 
    year var1 var2 
    <int> <int> <int> 
1 1995  1  1 
2 1996  1  2 
3 1997  0  0 
4 1998  1  2 
5 1999  0  2 
+0

을 찾고있을 것입니다. 도와 줘서 고마워. – Joe

관련 문제