【问题标题】:how to summarize numeric and factor level values simultaneously in R如何在 R 中同时汇总数值和因子水平值
【发布时间】:2017-04-14 12:12:16
【问题描述】:

我正在尝试通过对一列 (F1) 进行分组并获取其他列的平均值来汇总数据集,但其他列在数值和因子级别之间进行了拆分。我可以使用 ddply 来总结 F2 数值,但不知道如何对 F3 中的因子水平做同样的事情。我试图按组捕获最重复的因子级别,但这不起作用。

可重现的例子

library(plyr)
set.seed(37)
df<-data.frame("F1"=rep(LETTERS[1:5],each = 3),
               "F2"= 1:15,
               "F3"= sample(c("Yes","No"), 15, replace=TRUE))
df2 <- ddply(df,~F1,summarise,
                     mF2=mean(F2),
                     mF3=tail(names(sort(table(df$F3))), 1))
> df
   F1 F2  F3
1   A  1  No
2   A  2 Yes
3   A  3  No
4   B  4 Yes
5   B  5  No
6   B  6  No
7   C  7 Yes
8   C  8 Yes
9   C  9 Yes
10  D 10 Yes
11  D 11 Yes
12  D 12  No
13  E 13 Yes
14  E 14 Yes
15  E 15  No
> df2
  F1 mF2 mF3
1  A   2 Yes
2  B   5 Yes
3  C   8 Yes
4  D  11 Yes
5  E  14 Yes

相反,df2 应该是这样的:

> df2
  F1 mF2 mF3
1  A   2 No
2  B   5 No
3  C   8 Yes
4  D  11 Yes
5  E  14 Yes

如果显示如何,我很想尝试使用 dplyr 或其他方法。

【问题讨论】:

  • 你为什么用table(df$F3)而不是table(F3)?这样您就可以为整个数据集而不是子集执行此操作。您也可以通过执行df %&gt;% group_by(F1) %&gt;% summarise(mF2 = mean(F2), mF3 = tail(names(sort(table(F3))), 1)) 之类的操作轻松地将您的 plyr 代码转换为 dplyr

标签: r dplyr plyr summarize


【解决方案1】:

我们可以在dplyr中使用类似的选项

library(dplyr)
df %>% 
  group_by(F1) %>% 
  summarise(mF2 = mean(F2), mF3 = tail(names(sort(table(F3))),1))

【讨论】:

  • 这并没有解决 OP 的“意外”行为
  • @DavidArenburg 我在看I'd keep to try it in dplyr
  • @akrun:吐出 1 行。它缺少什么来匹配上面的 ddply 输出?
  • @val 使用dplyr::summarise(mF2 = mean(..
  • @val 它与新方法无关。如果您不明白自己做错了什么,代码转储将如何帮助您更好地理解它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
相关资源
最近更新 更多