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
对R数据帧中的分组行执行函数_R_Dataframe_Subset - Fatal编程技术网

对R数据帧中的分组行执行函数

对R数据帧中的分组行执行函数,r,dataframe,subset,R,Dataframe,Subset,我有一个大的数据框,其中多行是对单个ID的重复测量。我想返回每一行的最大列值。基本上按照SQL执行group.by()函数 数据帧(用于说明) 我想调用max(lac)并返回以下结果 我环顾四周,认为by()函数可能有用,但没有任何乐趣(下面的代码) newdf试试这个: > by(mtcars, mtcars$cyl, max) mtcars$cyl: 4 [1] 146.7 --------------------------------------------------------

我有一个大的数据框,其中多行是对单个ID的重复测量。我想返回每一行的最大列值。基本上按照SQL执行group.by()函数

数据帧(用于说明)

我想调用max(lac)并返回以下结果

我环顾四周,认为by()函数可能有用,但没有任何乐趣(下面的代码)

newdf试试这个:

> by(mtcars, mtcars$cyl, max)
mtcars$cyl: 4
[1] 146.7
--------------------------------------------------------------------------------------- 
mtcars$cyl: 6
[1] 258
--------------------------------------------------------------------------------------- 
mtcars$cyl: 8
[1] 472
或者使用
plyr

> require(plyr)
Loading required package: plyr
> ddply(mtcars, .(cyl), max)
  cyl    V1
1   4 146.7
2   6 258.0
3   8 472.0
试试这个:

> by(mtcars, mtcars$cyl, max)
mtcars$cyl: 4
[1] 146.7
--------------------------------------------------------------------------------------- 
mtcars$cyl: 6
[1] 258
--------------------------------------------------------------------------------------- 
mtcars$cyl: 8
[1] 472
或者使用
plyr

> require(plyr)
Loading required package: plyr
> ddply(mtcars, .(cyl), max)
  cyl    V1
1   4 146.7
2   6 258.0
3   8 472.0

如更新中所述,找到了使用plyr的解决方案

使用的代码是:

max_lac <- ddply(.data=df, .variables=.(ID), function(x) 
+ x[which(x$lac == max(x$lac)), ])

max_lac找到了使用plyr的解决方案,如更新中所述

使用的代码是:

max_lac <- ddply(.data=df, .variables=.(ID), function(x) 
+ x[which(x$lac == max(x$lac)), ])

max\u lac对于大型数据集,请尝试
data.table
(假设
df
是您的数据集)


对于大型数据集,请尝试使用
data.table
(假设
df
是您的数据集)

(如果查看ddply和which.max) 是吗

ddply(df,.ID,function(x){x[which.max(x$lac)),]}
(如果查看ddply和which.max) 是吗

ddply(df,.ID,function(x){x[which.max(x$lac)),]}

在处理大型数据集时,这里有一个
dplyr
备选方案:

library(dplyr)

df %>% group_by(ID) %>% filter(lac == max(lac))

#Source: local data frame [3 x 3]
#Groups: ID
#
#  ID lac pO2
#1 M1   4  80
#2 M2   3  70
#3 M3   5  75
请注意,如果同一组ID中有多行具有最大值,此函数将返回包含lac中最大值的所有行,而使用
which.max(.)
的函数将只返回包含最大值的第一行(每组)

如果只希望返回每个组的第一个最大值,则可以使用例如:

df %>% group_by(ID) %>% filter(1:n() == which.max(lac))


在处理大型数据集时,这里有一个
dplyr
备选方案:

library(dplyr)

df %>% group_by(ID) %>% filter(lac == max(lac))

#Source: local data frame [3 x 3]
#Groups: ID
#
#  ID lac pO2
#1 M1   4  80
#2 M2   3  70
#3 M3   5  75
请注意,如果同一组ID中有多行具有最大值,此函数将返回包含lac中最大值的所有行,而使用
which.max(.)
的函数将只返回包含最大值的第一行(每组)

如果只希望返回每个组的第一个最大值,则可以使用例如:

df %>% group_by(ID) %>% filter(1:n() == which.max(lac))


谢谢@landroni,我通过做类似的事情,在发布您的解决方案的同时成功地解决了这个问题。:)谢谢@landroni,我通过做类似的事情,在发布您的解决方案的同时成功地解决了这个问题。:)By和tapply的工作方式不同,第一个参数需要为函数使用正确的格式:
tapply(df$lac,df$ID,max)
By和tapply的工作方式不同,第一个参数需要为函数使用正确的格式:
tapply(df$lac,df$ID,max)
我故意没有发布这篇文章,所以你不会生我的气:)@davidernburg,太棒了,你是一个真正的团队合作者;)您可能还想在这里添加OP需要分离plyr(似乎他已经在使用它了)@Davidernburg,说得对。我现在无法测试,但我猜对于这些函数,plyr加载不会立即出现问题。此外,据我所知(但可能不推荐),如果在plyr之后加载dplyr,则可能会加载麻烦包。谢谢@初学者和@daviderburg!我没有为每个ID考虑多个最大行,这很好。如果这项试点研究成功,这在未来可能会很有用。:)我是故意不发这个帖子的,这样你就不会生我的气:)@DavidArenburg,太棒了,你是一个真正的团队成员;)您可能还想在这里添加OP需要分离plyr(似乎他已经在使用它了)@Davidernburg,说得对。我现在无法测试,但我猜对于这些函数,plyr加载不会立即出现问题。此外,据我所知(但可能不推荐),如果在plyr之后加载dplyr,则可能会加载麻烦包。谢谢@初学者和@daviderburg!我没有为每个ID考虑多个最大行,这很好。如果这项试点研究成功,这在未来可能会很有用。:)