Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用data.table包选择特定行_R_Data.table - Fatal编程技术网

R 使用data.table包选择特定行

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(

我有以下(简化)数据集:

但这并没有给出我想要的线,它只是显示了由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(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行!谢谢我添加了一个解决方案。谢谢,这很好。但正如您所说,这可能不是最有效的方法,也许可以去掉“==”?请参阅最后一个解决方案。什么是最有效的取决于组的数量和大小。那么,创建具有代表性的虚拟数据,以便我们可以测试解决方案。