2017-10-04 131 views
-1

所以我有以下的数据集(这是什么样子,与原来的是7K行的小样本/例和30列超过70年):如何使用汇总和分组依据在r中创建汇总表?

Year,Location,Population Total, Median Age, Household Total 
2000, Adak, 220, 45, 67 
2000, Akiachak, 567, NA, 98 
2000, Rainfall, 2, NA, 11 
1990, Adak, NA, 33, 56 
1990, Akiachak, 456, NA, 446 
1990, Tioga, 446, NA, NA 

我想创建一个汇总表,表明每个变量的位置有多少年的数据可用。因此,像这样的工作(对于小例子来自前):

Location,Population Total, Median Age, Household Total 
Adak,1,2,2 
Akiachak,2,0,2 
Rainfall,1,0,1 
Tioga,1,0,0 

我是新来的R和,所以我不能确定的语法没有使用这两个命令在一起。任何帮助将是美好的或替代品。

+0

你会想要使用'dplyr'包。以'group_by(Location)'开始,然后写出'summarise'或'count'语句。尽管如此,我建议您查看关于使用'dplyr'的教程。 –

+0

另外,如果您提供了您尝试过的方法示例,那么您会在这里收到更好的问题反馈。现在,有些人可能会将此解释为功课题... –

+0

谢谢!我正在考虑将不是NA的所有内容切换到1,Na切换为0,然后在消除多年的同时聚合这些行。但我的老板说我应该尝试一起使用这两个功能。 – jules

回答

1

dplyrsummarize_all A液:

library(dplyr) 
df %>% 
    group_by(Location) %>% 
    summarize_all(funs(sum(!is.na(.)))) %>% 
    select(-Year) 

或者你可以使用summarize_at

df %>% 
    group_by(Location) %>% 
    summarize_at(vars(-Year), funs(sum(!is.na(.)))) 

结果:

# A tibble: 4 x 4 
    Location PopulationTotal MedianAge HouseholdTotal 
     <chr>   <int>  <int>   <int> 
1  Adak    1   2    2 
2 Akiachak    2   0    2 
3 Rainfall    1   0    1 
4  Tioga    1   0    0 

数据:

df = read.table(text = "Year,Location,PopulationTotal, MedianAge, HouseholdTotal 
       2000, Adak, 220, 45, 67 
       2000, Akiachak, 567, NA, 98 
       2000, Rainfall, 2, NA, 11 
       1990, Adak, NA, 33, 56 
       1990, Akiachak, 456, NA, 446 
       1990, Tioga, 446, NA, NA", header = TRUE, sep = ",", stringsAsFactors = FALSE) 

library(dplyr)  
df = df %>% 
    mutate_at(vars(PopulationTotal:HouseholdTotal), as.numeric) 
1

你可以做这样的事情:

x %>% 
    group_by(Location) %>% 
    summarise(count_years = n(), 
      count_pop_total = sum(!is.na(Population_Total)), 
      count_median_age = sum(!is.na(Median_Age)), 
      count_house_total = sum(!is.na(Household_Total))) 

在这里您可以用您要执行任何操作的平均值。您应该查看dplyr vignette以获取更通用的解决方案。

+0

添加,那么您是正确的。我误读了这个问题 – tbradley

+0

我改变了我的回答,给出了OP明确要求使用'group_by'和'summarise'的方法,但是,@useR给出的'summarize_all'或者'summarize_at'的回答可能更适合这种情况 – tbradley