Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.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
如何通过a列使R中的a唯一,并保持B列中具有最大值的行_R_Unique - Fatal编程技术网

如何通过a列使R中的a唯一,并保持B列中具有最大值的行

如何通过a列使R中的a唯一,并保持B列中具有最大值的行,r,unique,R,Unique,我有一个data.frame,有几个列(17)。 第2列有几行具有相同的值,我只想保留其中一行,特别是第17列中具有最大值的那一行 例如: A B 'a' 1 'a' 2 'a' 3 'b' 5 'b' 200 Would return A B 'a' 3 'b' 200 (加上其他列) 到目前为止,我一直在使用unique函数,但我认为它会随机保留一个或仅保留第一个出现的函数 **更新** 实际数据有376000行。我试过data.table和ddply建议,但它

我有一个data.frame,有几个列(17)。 第2列有几行具有相同的值,我只想保留其中一行,特别是第17列中具有最大值的那一行

例如:

A    B
'a'  1
'a'  2
'a'  3
'b'  5
'b'  200

Would return
A    B
'a'  3
'b'  200
(加上其他列)

到目前为止,我一直在使用unique函数,但我认为它会随机保留一个或仅保留第一个出现的函数

**更新**
实际数据有376000行。我试过data.table和ddply建议,但它们需要很长时间。您知道哪种方法最有效吗?

使用软件包
数据的解决方案。表

set.seed(42)
dat <- data.frame(A=c('a','a','a','b','b'),B=c(1,2,3,5,200),C=rnorm(5))
library(data.table)

dat <- as.data.table(dat)
dat[,.SD[which.max(B)],by=A]

   A   B         C
1: a   3 0.3631284
2: b 200 0.4042683
set.seed(42)

dat一个使用R基函数的不太优雅的解决方案

> ind <- with(dat, tapply(B, A, which.max)) # Using @Roland's data
> mysplit <- split(dat, dat$A)
> do.call(rbind, lapply(1:length(mysplit), function(i) mysplit[[i]][ind[i],]))
  A   B         C
3 a   3 0.3631284
5 b 200 0.4042683

>ind搜索
taply
plyr
,您会发现许多相同的问题。关于更新:您需要提供更多信息。我已经测试了data.table解决方案,共有10M行和26组,性能令人满意。我正在测试提供的第一个解决方案。罗兰的最后一次更新需要几分钟。谢谢这与我的答案有所不同,不清楚OP想要实现什么。此解决方案为每列选择最大值,但OP要求选择第17列具有最高值的完整行@罗兰的答案是目前唯一正确的。但对于多个COL,结果是NAs(数据只有数字)。我想得到max(col1,col2,col3)和by=col3,col4,col5?我试图扩展与
dat[,.SD[which.max(col1,col2,col3),by=c(col3,col4,col5)
相同的函数。但是结果看起来不正确。查找
选择col3,col4,col5,max(col1)作为col1,max(col2)作为col2,max(col3)作为col3组,col4,col5