根据代码,此dplyr组_的基本R等价物是什么?
具有以下代码块:根据代码,此dplyr组_的基本R等价物是什么?,r,dplyr,tapply,R,Dplyr,Tapply,具有以下代码块: library(tidyverse) by_age2 <- gss_cat %>% filter(!is.na(age)) %>% count(age, marital) %>% group_by(age) %>% mutate(prop = n / sum(n)) 库(tidyverse) 按年龄2% 过滤器(!is.na(年龄))%>% 计数(年龄、婚姻状况)%>% 组别(年龄)%>% 变异(prop=n/和(n)) 在ba
library(tidyverse)
by_age2 <- gss_cat %>%
filter(!is.na(age)) %>%
count(age, marital) %>%
group_by(age) %>%
mutate(prop = n / sum(n))
库(tidyverse)
按年龄2%
过滤器(!is.na(年龄))%>%
计数(年龄、婚姻状况)%>%
组别(年龄)%>%
变异(prop=n/和(n))
在base R中是否有一个简单的等效代码?
过滤器
可以替换为gss\u cat[!is.na(gss\u cat$age),]
,但之后我遇到了麻烦。很明显,这是一项由、tapply
或aggregate
完成的工作,但我一直没有找到正确的方法by(gss_2,with(gss_2,list(年龄,婚姻)),length)
是朝着正确的方向迈出的一步,但是输出是糟糕的。我们可以在表上使用比例在子集之后输出来删除NA
(完成。案例)并选择列
数据来自forcats
软件包。因此,加载包并获取数据
library(forcats)
data(gss_cat)
使用上述表格/比例
by_age2_base <- proportions(table(subset(gss_cat, complete.cases(age),
select = c(age, marital))), 1)
-与OP的输出进行比较
head(by_age2, 3)
# A tibble: 3 x 4
# Groups: age [2]
age marital n prop
<int> <fct> <int> <dbl>
1 18 Never married 89 0.978
2 18 Married 2 0.0220
3 19 Never married 234 0.940
或者另一个选项是aggregate/ave
(使用R 4.1.0
)
尝试比例(表(子集(gss_cat,complete.cases(年龄),select=c(年龄,婚姻)))
head(by_age2, 3)
# A tibble: 3 x 4
# Groups: age [2]
age marital n prop
<int> <fct> <int> <dbl>
1 18 Never married 89 0.978
2 18 Married 2 0.0220
3 19 Never married 234 0.940
by_age2_base_long <- subset(as.data.frame(by_age2_base), Freq > 0)
subset(gss_cat, complete.cases(age), select = c(age, marital)) |>
{\(dat) aggregate(cbind(n = age) ~ age + marital,
data = dat, FUN = length)}() |>
transform(prop = ave(n, age, FUN = \(x) x/sum(x)))