如何通过另一个变量中的观察来总结一个变量中的唯一值?
Posted
技术标签:
【中文标题】如何通过另一个变量中的观察来总结一个变量中的唯一值?【英文标题】:How can I sum the unique values in a variable by the observations in another variable? 【发布时间】:2020-01-29 16:41:04 【问题描述】:我有一个数据集,其中包含特定年份的医院就诊信息。其中一个变量包含访问发生的县的县代码,另一个变量包含每次访问发生的年份。我想做的是总结每年发生的独特县医院就诊次数。我可以访问执行此操作的 SAS 代码,并且我试图在 R 中以某种方式复制它。
SAS 代码是:
proc sql;
select ED_VISIT_YEAR, count(distinct COUNTY_CD) as Counties from dataset
group by ED_VISIT_YEAR;
quit; run;
我曾尝试将聚合函数和唯一函数与 sum 一起使用,但总是出错。
我唯一要做的就是:
Check <- as.matrix(unique(ED_a$COUNTY_CD,ED_a$ED_VISIT_YEAR))
产生这样的结果:
V1
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 1185
我正在寻找的是这样的:
ED_VISIT_YEAR Counties
2005 16
2006 16
2007 16
2008 16
我对 R 还是很陌生,这让我很困惑,所以任何帮助都将不胜感激。
【问题讨论】:
您能否提供一个可重现的代码示例(带有县变量、年份等)? 【参考方案1】:使用 dplyr:
ED_a %>% group_by(ED_VISIT_YEAR) %>% tally(name="counties")
如果您不想使用dplyr
,基本解决方案可能是这样的:
countysummaries<-as.data.frame(counties=sapply(split(ED_a,ED_a$ED_VISIT_YEAR),nrow)
请注意,这会将年份作为行名而不是列,因此您可能希望在之后执行此操作:
countysummaries$ED_VISIT_YEAR<-rownames(countysummaries)
(tidyverse 也有 rownames_to_column
,但在这里我们正在寻找一个基本的解决方案)。
【讨论】:
谢谢。使用您的 dplyr 示例使我走上正轨。我做的唯一不同的事情是我正在寻找的输出我将不同的函数添加到代码行中。像这样:ED_a %>% group_by(ED_VISIT_YEAR) %>% distinct(COUNTY_CD) %>% tally(name="Counties)【参考方案2】:在 SQL 中,要为不支持这种聚合类型的 SQL 方言(例如 MS Access SQL)复制 COUNT(DISTINCT ...)
,您必须首先在一级返回不同的记录,然后在最后一级计算返回的行数:
SELECT Year, Count(*) As distinct_counties
FROM (SELECT DISTINCT Year, CountyCD
FROM myTable) sub
GROUP BY Year
因此在基础 R 中,在 unique
调用之后运行 aggregate
(cbind
重命名列):
aggregate(cbind(Counties=COUNTY_CD) ~ ED_VISIT_YEAR,
data = unique(ED_a$COUNTY_CD, ED_a$ED_VISIT_YEAR),
FUN = length)
【讨论】:
以上是关于如何通过另一个变量中的观察来总结一个变量中的唯一值?的主要内容,如果未能解决你的问题,请参考以下文章
获取单个变量中的多个值并使用它与另一个变量中的单个值进行比较