制作具有 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 函数是啥?的主要内容,如果未能解决你的问题,请参考以下文章

具有多个选项卡的 Linq to Excel [重复]

如何将具有特定字符串的excel表读入R

如何在每个导航选项卡的片段内创建 2 个片段

r 在R中为多因子列创建频率表

仅使用一个视图控制器的具有多个选项卡的选项卡栏

如何验证具有多个选项卡的表单?