r - 通过对分组变量的某些列求和来合并特定行
问题描述
以下数据框是更大 df 的子集,其中包含重复信息
df<-data.frame(Caught=c(92,134,92,134),
Discarded=c(49,47,49,47),
Units=c(170,170,220,220),
Hours=c(72,72,72,72),
Colour=c("red","red","red","red"))
在Base R中,我想得到以下内容:
df_result<-data.frame(Caught=226,
Retained=96,
Units=390,
Hours=72,
colour="red")
所以基本上结果是 Caught、Retained、Units 列的唯一值的总和,并为 Hours 和 color 保留相同的值(Caught=92+134,Retained=49+47,Units=170+220,Hours=72,color ="红色)
但是,我打算在包含几列的更大的 data.frame 中执行此操作。我的想法是应用一个基于列名的函数:
l <- lapply(df, function(x) {
if(names(x) %in% c("Caught","Discarded","Units"))
sum(unique(x))
else
unique(x)
})
as.data.frame(l)
但是,这不起作用,因为我不完全确定在使用时如何提取向量名称lapply()
以及诸如此类的其他功能。
我试过没有成功实现by()
,apply()
功能。
谢谢
解决方案
要求基础 R:
l <- lapply( df, function(n) {
if( is.numeric(n) )
sum( unique(n) )
else
unique( n )
})
as.data.frame(l)
该解决方案利用了 data.frames 实际上只是向量列表的事实。
它产生这个:
# Caught Discarded Units Hours Colour
# 226 96 390 72 red
推荐阅读
- java - Android 将 MSAL 添加到应用程序会导致用户名不能为空
- node.js - 为路径解析 Prisma Cloud 获取 node.js 的图像漏洞错误
- css - 在属于另一个类的 div 类中隐藏标题
- rust - Rust 中的“0is”表示法是什么?
- php - 带有 ACF 中继器字段的 Bootstrap 4 Carosuel
- c# - Selenium C# - 无法建立连接,因为目标机器主动拒绝它
- javascript - mmenujs 链接不可抓取且不使用被动侦听器来提高滚动性能
- java - addOnFailureListener() 如果用户曾经启用并在一段时间后禁用位置,则不会调用。使用 LocationServices.getSettingsClient() 时
- ios - iOS WKWebView 是否支持故障文本?如何在 WKWebView 上显示故障文本?
- aws-glue - 即使 Athena 查询返回新分区的数据,Glue 爬虫报告 0 个表已更新