制作具有 2 个因子的频率选项卡的最简单的 R 函数是啥?
Posted
技术标签:
【中文标题】制作具有 2 个因子的频率选项卡的最简单的 R 函数是啥?【英文标题】:What is the simplest R function for make a frequency tab with 2 factors?制作具有 2 个因子的频率选项卡的最简单的 R 函数是什么? 【发布时间】:2019-08-23 01:56:49 【问题描述】:我正在使用大约 40.000.000 行的以下 data.frame:
structure(list(glucose = c(25.355843637, 10.886229826, 28.122760385,
20.865273834, 34.563779699, 26.489825911, 43.454200724, 43.544919306,
28.984586913, 29.937132023), nefa = c(21763.764082, 246228.88267,
75785.828326, 13397.168282, 23325.824788, 20306.309909, 696440.45064,
14358.729437, 87055.05633, 13397.168282), gluc_cat = c(1L, 4L,
1L, 1L, 1L, 1L, 6L, 1L, 1L, 1L), cont = c(551838.59904, 2680504.2066,
2131306.6906, 279535.5848, 806228.66928, 537910.61438, 30263263.134,
625249.71469, 2523254.8464, 401072.79558), season = structure(c(3L,
4L, 3L, 3L, 3L, 3L, 3L, 1L, 3L, 2L), .Label = c("Fall", "Spring",
"Summer", "Winter"), class = "factor"), md = c(120438.488265459,
115074.616033211, 62272.4097576723, 52303.3447941409, 74214.9213922757,
44565.2765555817, 11821.9466392891, 58251.7622084503, 153983.271493517,
41509.1943282798), st = c(33457899969.5155, 23427439594.7117,
8572667146.93446, 6076535084.06137, 8356580101.09359, 7100437423.93883,
3942148413.49136, 5200020083.88787, 20620429883.9183, 6554207754.48383
), bt = c(277800.730077007, 203584.77310018, 137663.969971521,
116178.70918156, 112599.729870001, 159326.677016874, 333460.176549098,
89268.0304722786, 133913.441920777, 157897.734719908), ol = c("prim",
"mult", "prim", "prim", "mult", "prim", "mult", "mult", "prim",
"mult")), row.names = c(NA, 10L), class = "data.frame")
尝试通过“gluc_cat”(葡萄糖因子)和“季节”(日期因子)创建变量葡萄糖的频率选项卡,如下所示:
gluc_cat Fall Spring Summer Winter
1 60% 60% 59% 60%
2 9% 9% 9% 9%
3 7% 7% 7% 7%
4 3% 3% 3% 3%
5 6% 6% 6% 6%
6 10% 10% 11% 10%
NA 5% 5% 5% 5%
我现在有一些看起来像这样的问题。但是我无法使用他们的任何代码获得这种格式的表格,表格“内部”有一个变量。
我试过这个代码:
df$gluc_cat <- factor(df$gluc_cat)
df$gseason <- factor(df$season)
freq <- df %>%
group_by (season, gluc_cat, glucose) %>%
summarise (n=n()) %>%
mutate(rel.freq = paste0(round(100 * n/sum(n), 0), "%"))
freq
#-------------------------
freq <- table(df$season,cdf$sgluc_cat, df7$glucose)
freq
#--------------------------
mytable <- xtabs(~ season+gluc_cat+glucose, data=df)
mytable
#--------------------------------
mytable <- c(df$season,df$gluc_cat,df$glucose)
#--------------------------------
mytable <- sapply(teste, table)
但他们都没有给我我需要的东西。
提前致谢,如果内容太基本,请见谅。
【问题讨论】:
假设您只共享了数据的子集,因为您没有gluc_cat
与 2、3 等。您需要 table(df$gluc_cat, df$season)
吗?
prop.table(xtabs(glucose~gluc_cat+season,df),2)
round(prop.table(table(df$gluc_cat, df$season),2)*100)
?
Ronak,在这段代码中,我想我不会得到葡萄糖的结果,而是葡萄糖猫的结果。我不知道我是否能解释清楚。我需要两种情况下的葡萄糖频率。例如:在 gluc_cat 1 类和夏季;在第 2 班和夏季;在第 5 班和冬天……是的,这只是一个示例,因为我的 data.frame 有大约 40.000.000 行。
Onyambu,非常感谢!我猜代码 prop.table(xtabs(glucose~gluc_cat+season,df),2) 有效。我认为他的代码 round(prop.table(table(df$gluc_cat, df$season),2)*100) 不会考虑变量葡萄糖,对吧?
【参考方案1】:
我认为您正在寻找类似的东西:
df %>%
group_by(season, gluc_cat) %>%
summarise(n_tmp=n()) %>%
group_by(season) %>%
mutate(rel.freq=paste0(round(100 * n_tmp/sum(n_tmp), 0), "%")) %>%
ungroup() %>%
select(-n_tmp) %>%
spread(key=season, value=rel.freq, fill="0%")
对于所提供的输入,给出
# A tibble: 3 x 5
gluc_cat Fall Spring Summer Winter
<int> <chr> <chr> <chr> <chr>
1 1 100% 100% 86% 0%
2 4 0% 0% 0% 100%
3 6 0% 0% 14% 0%
这与this other answer 非常相似,但添加了spread
以实现请求的宽格式。
【讨论】:
谢谢 merv,但我认为使用这段代码我没有得到表格“内部”变量葡萄糖的结果,对吧?只有葡萄糖猫。不知道能不能解释清楚。我需要两种情况下的葡萄糖频率。例如:在 gluc_cat 1 类和夏季;在第 2 班和夏季;在 5 年级和冬天... @AnaPaulaFranzoni 是的,我不关注。在您的示例中,列总和为 100%,这就是这样做的。如果您显示来自您提供的输入的预期输出,而不是来自不同数据子集的示例,这将有所帮助。以上是关于制作具有 2 个因子的频率选项卡的最简单的 R 函数是啥?的主要内容,如果未能解决你的问题,请参考以下文章