r - 根据条件(位置)删除重复行
问题描述
我有一个看起来像这样的数据集
df <- data.frame("id" = c("Alpha", "Alpha", "Alpha","Alpha","Beta","Beta","Beta","Beta"),
"Year" = c(1970,1970,1970,1971,1980,1980,1981,1982),
"Val" = c(2,3,-2,5,2,5,3,5))
我对每个 id 和时间标识符都有多重观察 - 例如,我有 3 个不同的 alpha 1970 值。我想每个 id/year 只保留一个观察结果,最值得注意的是每个 id/year 出现的最后一个观察结果。最终数据集应如下所示:
final <- data.frame("id" = c("Alpha","Alpha","Beta","Beta","Beta"),
"Year" = c(1970,1971,1980,1981,1982),
"Val" = c(-2,5,5,3,5))
有谁知道我该如何解决这个问题?
非常感谢您的帮助
解决方案
如果您对data.table
解决方案持开放态度,则可以非常简洁地完成:
library(data.table)
setDT(df)[, .SD[.N], by = c("id", "Year")]
#> id Year Val
#> 1: Alpha 1970 -2
#> 2: Alpha 1971 5
#> 3: Beta 1980 5
#> 4: Beta 1981 3
#> 5: Beta 1982 5
by = c("id", "Year")
id
按和对 data.table 进行分组Year
,.SD[.N]
然后返回每个此类组中的最后一行。
推荐阅读
- xslt - 检查 xsl:attribute name 是否对 XSL-FO 有效
- angularjs - 我的控制器 viewController 不会在我的 ng-view 上被调用
- rest - 如何使用 Rest API 在 IBM 云对象存储中获取区域列表
- javascript - 如何在 react-native 中编写特定于风味的代码?
- java - 如何从用户那里接受java中的参数
- python - 在 scikit-learn 中拟合包含列表的 pandas 列
- asp.net-core - System.Net.Http.HttpRequestException:无法建立 SSL 连接,请参阅内部异常
- python-3.x - 使用本机 TWS Python APi(Interactive Brokers API),我如何在变量中获取证券列表的价格快照?
- javascript - 如何从布尔检查内联返回承诺?
- sql-server - 使用 CTE 的多个日期范围