如何使用带有两个参数的 table by? R
How to use table by with two arguments? R
我的数据集是这样的
df
ID Year County APV sample
1 2014 A 1 1
1 2015 A 1 1
1 2016 A 0 0
1 2017 A NA 0
1 2018 A NA 0
1 2019 A NA 0
2 2014 B 1 1
2 2015 B 1 1
2 2016 B 1 1
2 2017 B 1 1
2 2018 B 0 0
2 2019 B NA 0
3 2014 A 1 1
3 2015 A 1 1
3 2016 A 0 0
3 2017 A NA 0
3 2018 A NA 0
3 2019 A NA 0
以此类推
所以我想将这些数据制表。
如果我只想按年份制表
datos<-as.data.frame(table(df$APV==0 & df$sample==0, by=df$Year))
我得到的数据集是这样的:
df1
Var1 by Freq
FALSE 2014 3
TRUE 2014 0
FALSE 2015 3
TRUE 2015 0
FALSE 2016 1
TRUE 2016 2
. . .
. . .
. . .
所以 false 表示仍然开放的公司。
如何按年份 和 县制表?
APV 告诉我第一个关闭的企业,(0)所以我想知道有多少企业按年份和县关闭
有两种方法。
我添加 !is.na(APV)
有两个原因:(1) 我不清楚您希望在那里发生什么; (2) table
实际上比 xtabs
对 NA
更稳健,所以我希望这两个结果相同。这两种方法的 前提 是相同的,但它们处理 NA
的方式确实不同。
table
您可能只需要知道 table
接受任意数量的参数,因此
head(as.data.frame(table(df$Var1, df$Year, df$County)))
# Var1 Var2 Var3 Freq
# 1 FALSE 2014 A 2
# 2 TRUE 2014 A 0
# 3 FALSE 2015 A 2
# 4 TRUE 2015 A 0
# 5 FALSE 2016 A 0
# 6 TRUE 2016 A 2
虽然名称丢失了,但它仍然有效。
xtabs
out <- as.data.frame(
xtabs(~ Var1 + Year + County,
data = transform(df, Var1 = (!is.na(APV) & APV == 0 & sample == 0)))
)
head(out)
# Var1 Year County Freq
# 1 FALSE 2014 A 2
# 2 TRUE 2014 A 0
# 3 FALSE 2015 A 2
# 4 TRUE 2015 A 0
# 5 FALSE 2016 A 0
# 6 TRUE 2016 A 2
(为了简单起见,我使用了 transform
。)
do.call 用于动态列
out2 <- as.data.frame(
do.call(table, subset(transform(df, Var1 = (!is.na(APV) & APV == 0 & sample == 0)),
select = c(Var1, Year, County)))
)
(相同的结果)
我的数据集是这样的
df
ID Year County APV sample
1 2014 A 1 1
1 2015 A 1 1
1 2016 A 0 0
1 2017 A NA 0
1 2018 A NA 0
1 2019 A NA 0
2 2014 B 1 1
2 2015 B 1 1
2 2016 B 1 1
2 2017 B 1 1
2 2018 B 0 0
2 2019 B NA 0
3 2014 A 1 1
3 2015 A 1 1
3 2016 A 0 0
3 2017 A NA 0
3 2018 A NA 0
3 2019 A NA 0
以此类推
所以我想将这些数据制表。
如果我只想按年份制表
datos<-as.data.frame(table(df$APV==0 & df$sample==0, by=df$Year))
我得到的数据集是这样的:
df1
Var1 by Freq
FALSE 2014 3
TRUE 2014 0
FALSE 2015 3
TRUE 2015 0
FALSE 2016 1
TRUE 2016 2
. . .
. . .
. . .
所以 false 表示仍然开放的公司。
如何按年份 和 县制表?
APV 告诉我第一个关闭的企业,(0)所以我想知道有多少企业按年份和县关闭
有两种方法。
我添加 !is.na(APV)
有两个原因:(1) 我不清楚您希望在那里发生什么; (2) table
实际上比 xtabs
对 NA
更稳健,所以我希望这两个结果相同。这两种方法的 前提 是相同的,但它们处理 NA
的方式确实不同。
table
您可能只需要知道 table
接受任意数量的参数,因此
head(as.data.frame(table(df$Var1, df$Year, df$County)))
# Var1 Var2 Var3 Freq
# 1 FALSE 2014 A 2
# 2 TRUE 2014 A 0
# 3 FALSE 2015 A 2
# 4 TRUE 2015 A 0
# 5 FALSE 2016 A 0
# 6 TRUE 2016 A 2
虽然名称丢失了,但它仍然有效。
xtabs
out <- as.data.frame(
xtabs(~ Var1 + Year + County,
data = transform(df, Var1 = (!is.na(APV) & APV == 0 & sample == 0)))
)
head(out)
# Var1 Year County Freq
# 1 FALSE 2014 A 2
# 2 TRUE 2014 A 0
# 3 FALSE 2015 A 2
# 4 TRUE 2015 A 0
# 5 FALSE 2016 A 0
# 6 TRUE 2016 A 2
(为了简单起见,我使用了 transform
。)
do.call 用于动态列
out2 <- as.data.frame(
do.call(table, subset(transform(df, Var1 = (!is.na(APV) & APV == 0 & sample == 0)),
select = c(Var1, Year, County)))
)
(相同的结果)