r - 按唯一行计算重复行
问题描述
我认为这个非常简单的问题有一个非常简单的解决方案,但我无法弄清楚。
假设我有一个带有一些重复行的 data.table(第 3 行和第 4 行是相同的)
dt <- data.table( val1 = c(1,2,3,3,4,5,6), val2 = 8 )
# val1 val2
# 1: 1 8
# 2: 2 8
# 3: 3 8
# 4: 3 8
# 5: 4 8
# 6: 5 8
# 7: 6 8
我想丢弃重复的行,只保留唯一的行,并引入一个新列val3
来指示一行在原始数据中出现的频率
预期输出:
dt.output <- data.table( val1 = c(1,2,3,4,5,6), val2 = 8, val3 = c(1,1,2,1,1,1) )
# val1 val2 val3
# 1: 1 8 1
# 2: 2 8 1
# 3: 3 8 2
# 4: 4 8 1
# 5: 5 8 1
# 6: 6 8 1
我有一种感觉,我几乎可以使用 update-join with unique(dt)[, val3 := ....]
,但我无法让...
部件返回我想要的东西,这让我发疯。
解决方案
简单地
dt[, .(val3 = .N), by = .(val1, val2)]
或者继续您的第一种方法,可以执行以下操作:
unique(dt)[, val3 := dt[.SD, on = .(val1, val2), .N, by = .EACHI][, N]][]
请注意,也可以在 中使用字符向量by
:
byvars <- grep("val\\d+", names(dt), value = TRUE)
dt[, .(val3 = .N), by = byvars]
推荐阅读
- javascript - 如何将一个组件中的输入字段引用注册到自定义 Hook?
- excel - 通过 VBScript 运行宏并置于前面(顶部窗口)
- node.js - 如何在不同的文件中定义多重存储?
- mysql - 使用外键查询以获取行值(名字和姓氏)
- amazon-web-services - AWS Athena + boto3:我应该如何执行命名查询?
- arrays - 在 Word VBA 中将记录集加载到数组中时遇到 Null 值,抛出 Null 的无效使用(使用带有 EXCEL 的 ADODB 连接)
- flutter - 如何在 GridView.builder cads 中添加不同的信息?
- google-apps-script - 谷歌脚本在运行后删除列公式
- python - Openvino movidius 无法读取 IP 摄像头
- angular - (几乎)每个组件中的导航栏