按多列分组并对其他多列求和
我有一个包含大约 200 列的数据框,我想按其中的前 10 列对表进行分组,这些列是因子,并对其余列进行求和。
我有我想要分组的所有列名称的列表以及我想要聚合的所有列的列表。
我正在寻找的输出格式需要是具有相同数量列的相同数据帧,只是分组在一起。
是否有使用包 data.table
、plyr
或任何其他包的解决方案?
I have a data frame with about 200 columns, out of them I want to group the table by first 10 or so which are factors and sum the rest of the columns.
I have list of all the column names which I want to group by and the list of all the cols which I want to aggregate.
The output format that I am looking for needs to be the same dataframe with same number of cols, just grouped together.
Is there a solution using packages data.table
, plyr
or any other?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
data.table 方式是:
或
其中
.SD
是 (S) (D)ata 不包括组列的子集。 (旁白:如果您需要一般性地引用组列,它们位于.BY
中。)The data.table way is :
or
where
.SD
is the (S)ubset of (D)ata excluding group columns. (Aside: If you need to refer to group columns generically, they are in.BY
.)请参阅下面的使用
dplyr::across
的更现代的答案。dplyr
的方式是:您可以使用
?dplyr 帮助文件中提到的特殊函数进一步指定要从
。summarise_each
中汇总或排除的列::选择See below for a more modern answer using
dplyr::across
.The
dplyr
way would be:You can further specify the columns to be summarised or excluded from the
summarise_each
by using the special functions mentioned in the help file of?dplyr::select
.在基本 R 中,这将是...
编辑:
自从我写这篇文章以来,聚合函数已经取得了长足的进步。上面的铸造都不是必要的。
有很多种写法。假设前 10 列被命名为
a1
到a10
我喜欢下面的内容,尽管它很冗长。(您可以使用粘贴来构造公式并使用
公式
)In base R this would be...
EDIT:
The aggregate function has come a long way since I wrote this. None of the casting above is necessary.
And there are a variety of ways to write this. Assuming the first 10 columns are named
a1
througha10
I like the following, even though it is verbose.(You could use paste to construct the formula and use
formula
)这似乎是 ddply 的任务(我使用 plyr 中包含的“棒球”数据集):
这为每个 groupColumns 提供了 dataColumns 中指定的列的总和。
This seems like a task for ddply (I use the 'baseball' dataset which is included with plyr):
This gives per groupColumns the sum of the columns specified in dataColumns.
使用 plyr::ddply:
Using plyr::ddply:
让我们考虑这个例子:
更新
dplyr
1.1.0 及以上您可以使用
pick
来选择列 -或者使用
.by 参数。
在
dplyr
1.1.0 之前,
_all
、_at
和_if
动词现已被取代我们现在使用across
对所有因子列进行分组并对所有其他列进行求和,我们可以这样做:对所有因子列和数字列进行求和:
我们也可以按位置执行此操作,但必须小心自此以来的数字不计算分组列。
Let's consider this example :
Update
dplyr
1.1.0 onwardsYou may use
pick
to select columns -Or use the
.by
argument.Before
dplyr
1.1.0_all
,_at
and_if
verbs are now superseded and we useacross
now to group all the factor columns and sum all the other columns, we can do :To group all factor columns and sum numeric columns :
We can also do this by position but have to be careful of the number since it doesn't count the grouping columns.
使用 dplyr 进行此操作的另一种通用方法(不需要列列表)是:
Another way to do this with dplyr that would be generic (don't need list of columns) would be: