2017-03-09 31 views
0

假設有5個屬性的數據幀dfx1, x2, x3, x4, Year,如下所示:組通過,並確定哪些條目有在一個給定的組

set.seed(1) 
x1 <- 1:30 
x2 <- rnorm(10) 
x3 <- rchisq(25, 2, ncp = 0) 
x4 <- rpois(6, 0.94) 
Year <- sample(2011:2014,30,replace=TRUE) 

noRow <- max(length(x1), length(x2), length(x3), length(x4), length(Year)) 

df <- list(x1=x1, x2=x2, x3=x3, x4=x4, Year=Year) 
attributes(df) <- list(names = names(df), row.names=1:30, class='data.frame') 

和輸出

x1   x2  x3 x4 Year 
1 1 -0.6264538 4.2807226 0 2014 
2 2 0.1836433 1.6273105 0 2014 
3 3 -0.8356286 0.3144031 0 2012 
4 4 1.5952808 0.6216108 0 2012 
5 5 0.3295078 0.9374638 1 2014 
6 6 -0.8204684 0.1363947 2 2013 
7 7 0.4874291 2.4985843 <NA> 2013 
8 8 0.7383247 2.0162627 <NA> 2012 
9 9 0.5757814 2.7218900 <NA> 2012 
10 10 -0.3053884 2.4119764 <NA> 2014 
11 11  <NA> 1.1082308 <NA> 2013 
12 12  <NA> 2.4140052 <NA> 2011 
13 13  <NA> 3.1249573 <NA> 2011 
14 14  <NA> 0.2615523 <NA> 2012 
15 15  <NA> 0.4381074 <NA> 2014 
16 16  <NA> 0.6944394 <NA> 2013 
17 17  <NA> 0.8599189 <NA> 2014 
18 18  <NA> 0.2924151 <NA> 2013 
19 19  <NA> 1.6834339 <NA> 2012 
20 20  <NA> 0.4848175 <NA> 2012 
21 21  <NA> 3.1606987 <NA> 2011 
22 22  <NA> 2.3705121 <NA> 2011 
23 23  <NA> 0.7808625 <NA> 2013 
24 24  <NA> 0.4621734 <NA> 2011 
25 25  <NA> 1.9421776 <NA> 2012 
26 26  <NA>  <NA> <NA> 2013 
27 27  <NA>  <NA> <NA> 2014 
28 28  <NA>  <NA> <NA> 2012 
29 29  <NA>  <NA> <NA> 2012 
30 30  <NA>  <NA> <NA> 2011 

我想按年份分組,並確定一個特定年份是否有一個或多個屬性沒有條目。 使用

library("dplyr") 
df1 <- df %>% 
    dplyr::group_by(Year) %>% 
    dplyr::mutate(count = n()) 

只給了我在某一年的條目數,但它並沒有告訴我哪些屬性存在/不缺少在某一年。 感謝您分享您的想法。

祝願輸出:

Year x1 x2 x3 x4 
2011 1 0 1 0 
2012 1 1 1 1 
2013 1 1 1 1 
2014 1 1 1 1 

其中1意味着有至少一個條目的變量在某一年,並0否則。

+1

如果目前你的意思非缺失,可以summarise_each(或一些類似的動詞)與函數像sum(!is.na(x))> 0 – Frank

+0

@Frank你可以請提供一個例子嗎? –

+0

您需要在問題中提供完整的示例 - 包括您期望的輸出。我只是在黑暗中嘗試你的嘗試。 – Frank

回答

0

此代碼解決您的問題:

df$attrib_ok <- !is.na(rowSums(df[1:4])) 
df1 <- df %>% 
     dplyr::group_by(Year) %>% 
     dplyr::mutate(count=sum(attrib_ok)) %>% 
     dplyr::select(-attrib_ok) 

但似乎你已經創建了一個腐敗的數據幀,其中該解決方案不`噸的工作。
你必須事先創建一個未損壞數據幀是這樣的:

set.seed(1) 
x1 <- 1:30 
x2 <- c(rnorm(10), rep(NA, 20)) 
x3 <- c(rchisq(25, 2, ncp = 0), rep(NA, 5)) 
x4 <- c(rpois(6, 0.94), rep(NA, 24)) 
Year <- sample(2011:2014,30,replace=TRUE) 
df <- data.frame(x1,x2,x3,x4,Year) 

代碼才能獲得希望的輸出:

df1 <- data.frame(Year=df$Year,!is.na(df[1:4])) 
df1 <- aggregate(.~Year, data = df1, FUN = sum) 
df1 <- data.frame(Year=df1$Year, apply(apply(df1[,2:5], 2, as.logical), 2, as.numeric)) 
+0

感謝您的回答,但是,這不完全是我想要的。您的解決方案會返回給定年份中所有四個屬性的數量不是NA。我想知道每個給定年份哪些屬性不是NA。 –

+0

@ mike.dl你可以在sum()> 0這個答案中改變sum()嗎? – Frank

相關問題