相关疑难解决方法(0)

如何使用dplyr选择每组中具有最大值的行?

我想用dplyr在每个组中选择一个具有最大值的行.

首先,我生成一些随机数据来显示我的问题

set.seed(1)
df <- expand.grid(list(A = 1:5, B = 1:5, C = 1:5))
df$value <- runif(nrow(df))
Run Code Online (Sandbox Code Playgroud)

在plyr中,我可以使用自定义函数来选择此行.

library(plyr)
ddply(df, .(A, B), function(x) x[which.max(x$value),])
Run Code Online (Sandbox Code Playgroud)

在dplyr中,我使用此代码来获取最大值,但不是具有最大值的行(在本例中为C列).

library(dplyr)
df %>% group_by(A, B) %>%
    summarise(max = max(value))
Run Code Online (Sandbox Code Playgroud)

我怎么能实现这个目标?谢谢你的任何建议.

sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252   
[3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C                      
[5] LC_TIME=English_Australia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_0.2  plyr_1.8.1

loaded via a namespace (and not attached):
[1] assertthat_0.1.0.99 parallel_3.1.0      Rcpp_0.11.1 …
Run Code Online (Sandbox Code Playgroud)

r plyr greatest-n-per-group dplyr

98
推荐指数
4
解决办法
9万
查看次数

如何选择每组中具有最大值的行

目前我有一个问题如下.在存在每个主题的多个观察的数据集中,我想制作该数据集的子集,其中仅选择记录的最大数据.例如,对于如下数据集:

ID <- c(1,1,1,2,2,2,2,3,3)
Value <- c(2,3,5,2,5,8,17,3,5)
Event <- c(1,1,2,1,2,1,2,2,2)

group <- data.frame(Subject=ID, pt=Value, Event=Event)
Run Code Online (Sandbox Code Playgroud)

对象1,2和3的最大pt值分别为5,17和5.我怎么能首先找到每个主题的最大pt值,然后将这个观察结果放在另一个数据框中?这意味着该子集仅具有每个主题的最大pt值.

r r-faq

63
推荐指数
10
解决办法
6万
查看次数

删除重复项,保持具有最大绝对值的条目

假设我有四个样本:id = 1,2,3和4,每个样本都有一个或多个测量值:

> a <- data.frame(id=c(1,1,2,2,3,4), value=c(1,2,3,-4,-5,6))
> a
  id value
1  1     1
2  1     2
3  2     3
4  2    -4
5  3    -5
6  4     6
Run Code Online (Sandbox Code Playgroud)

我想删除重复项,每个ID只保留一个条目 - 具有"value"列绝对值最大的条目.即,这就是我想要的:

> a[c(2,4,5,6), ]
  id value
2  1     2
4  2    -4
5  3    -5
6  4     6
Run Code Online (Sandbox Code Playgroud)

我怎么能在R中这样做?

r duplicates duplicate-removal

28
推荐指数
5
解决办法
2万
查看次数

按组选择数据框中的最高值

我有以下内容 df

dat <- data.frame(Cases = c("Student3","Student3","Student3","Student1","Student1",
"Student2","Student2","Student2","Student4"), Class = rep("Math", 9),
Scores = c(9,5,2,7,3,8,5,1,7), stringsAsFactors = F)


> dat
   Cases    Class   Scores
1 Student3  Math      9
2 Student3  Math      5
3 Student3  Math      2
4 Student1  Math      7
5 Student1  Math      3
6 Student2  Math      8
7 Student2  Math      5
8 Student2  Math      1
9 Student4  Math      7
Run Code Online (Sandbox Code Playgroud)

另一方面,我有另一个df,其中包含以下信息:

d <- data.frame(Cases = c("Student3", "Student1",
"Student2", "Student4"), Class = rep("Math", 4), stringsAsFactors = F)

    Cases  Class
1 Student3  Math …
Run Code Online (Sandbox Code Playgroud)

r dataframe

5
推荐指数
1
解决办法
138
查看次数

过滤掉不符合条件的组行

以下是用于此问题的代码:

set.seed(1337)
myDT <- data.table(Key1 = sample(letters, 500, replace = TRUE),
                   Key2 = sample(LETTERS[1:5], 500, TRUE),
                   Data = sample(1:26, 500, replace = TRUE))
setkey(myDT, Key1, Key2)
# showing what myDT looks like
> myDT
     Key1 Key2 Data
  1:    a    A    6
  2:    a    A    3
  3:    a    B    2
  4:    a    B   20
  5:    a    B   13
 ---               
496:    z    D   23
497:    z    E    3
498:    z    E   18
499:    z    E   11
500:    z    E    2
Run Code Online (Sandbox Code Playgroud)

我想配对myDT …

r data.table

3
推荐指数
1
解决办法
253
查看次数