R 使用data.table包选择特定行
我有以下(简化)数据集: 但这并没有给出我想要的线,它只是显示了由a分组的x的最小值 有什么建议吗R 使用data.table包选择特定行,r,data.table,R,Data.table,我有以下(简化)数据集: 但这并没有给出我想要的线,它只是显示了由a分组的x的最小值 有什么建议吗 library(data.table) dt <- data.table(a=c("A","A","B","B","B"), x=c(1,2,3,3,4)) 或者: setkeyv(dt, c("a","x")) dt[unique(dt[,a]), mult="first"] 既然您想要所有的领带: dt[,.SD[x==min(x)], by=a] 您还可以使用: setkeyv(
library(data.table)
dt <- data.table(a=c("A","A","B","B","B"), x=c(1,2,3,3,4))
或者:
setkeyv(dt, c("a","x"))
dt[unique(dt[,a]), mult="first"]
既然您想要所有的领带:
dt[,.SD[x==min(x)], by=a]
您还可以使用:
setkeyv(dt,c("a","x"))
dt[dt[unique(dt[,a]), mult="first"]]
如果你有非常大的团队,这可能会更有效率
或者:
setkeyv(dt, c("a","x"))
dt[unique(dt[,a]), mult="first"]
既然您想要所有的领带:
dt[,.SD[x==min(x)], by=a]
您还可以使用:
setkeyv(dt,c("a","x"))
dt[dt[unique(dt[,a]), mult="first"]]
如果你有非常大的团队,这可能会更有效。给你
R) dt <- data.table(a=c("A","A","B","B","B"),x=c(1,2,3,3,4))
R) dt[dt[,list(IDX=.I[x==min(x)]),by=a]$IDX]
a x
1: A 1
2: B 3
3: B 3
R)dt给你
R) dt <- data.table(a=c("A","A","B","B","B"),x=c(1,2,3,3,4))
R) dt[dt[,list(IDX=.I[x==min(x)]),by=a]$IDX]
a x
1: A 1
2: B 3
3: B 3
R)dt他还想要第四行!谢谢我添加了一个解决方案。谢谢,这很好。但正如您所说,这可能不是最有效的方法,也许可以去掉“==”?请参阅最后一个解决方案。什么是最有效的取决于组的数量和大小。好吧,创建具有代表性的虚拟数据,这样我们可以测试解决方案。他还想要第4行!谢谢我添加了一个解决方案。谢谢,这很好。但正如您所说,这可能不是最有效的方法,也许可以去掉“==”?请参阅最后一个解决方案。什么是最有效的取决于组的数量和大小。那么,创建具有代表性的虚拟数据,以便我们可以测试解决方案。