如何使用汇总和分组依据在r中创建汇总表?
问题描述:
所以我有以下的数据集(这是什么样子,与原来的是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和,所以我不能确定的语法没有使用这两个命令在一起。任何帮助将是美好的或替代品。
答
从dplyr
与summarize_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)
答
你可以做这样的事情:
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以获取更通用的解决方案。
你会想要使用'dplyr'包。以'group_by(Location)'开始,然后写出'summarise'或'count'语句。尽管如此,我建议您查看关于使用'dplyr'的教程。 –
另外,如果您提供了您尝试过的方法示例,那么您会在这里收到更好的问题反馈。现在,有些人可能会将此解释为功课题... –
谢谢!我正在考虑将不是NA的所有内容切换到1,Na切换为0,然后在消除多年的同时聚合这些行。但我的老板说我应该尝试一起使用这两个功能。 – jules