R 子集 data.frame 来自一个向量的最大值并由另一个向量分组
R Subset data.frame from max value of one vector and grouped by another
>ID<-c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C')
>WK<-c(1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 5)
>NumSuccess<-c(0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 3)
>Data<-data.frame(ID, WK, NumSuccess)
我正在尝试根据 "NumSuccesses" 中的值创建一个子集 data.frame "Data2",该子集对应于按 [=18= 分组的 "WK" 中的最大值].结果 data.frame 应如下所示:
>ID<-c('A','B','C')
>WK<-c(3, 3, 5)
>NumSuccess<-c(2, 1, 3)
>Data2<-data.frame(ID, WK, NumSuccess)
这可以通过不止一种方式完成。如果 'WK'、每个 'ID' 的最大值并希望所有行具有最大值 'WK',则 filter
与逻辑条件 (WK==max(WK)
) 按 'ID' 分组后。
library(dplyr)
Data %>%
group_by(ID) %>%
filter(WK==max(WK))
# ID WK NumSuccess
#1 A 3 2
#2 B 3 1
#3 C 5 3
如果每个 'ID' 有一个 'WK' 的 'max' 值,我们可以使用 which.max
或使用 arrange
通过 'WK' 每个 'ID'
Data %>%
group_by(ID) %>%
slice(which.max(WK))
# ID WK NumSuccess
#1 A 3 2
#2 B 3 1
#3 C 5 3
Data %>%
group_by(ID) %>%
arrange(-WK) %>%
slice(1)
data.table
中的类似方法是
library(data.table)
setDT(Data)[, .SD[max(WK)==WK], ID]
setDT(Data)[, .SD[which.max(WK)], ID]
setkey(setDT(Data), WK)[, .SD[.N], ID]
或者我们可以使用 base R
中的 ave
Data[with(Data, ave(WK, ID, FUN=max)==WK),]
>ID<-c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C')
>WK<-c(1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 5)
>NumSuccess<-c(0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 3)
>Data<-data.frame(ID, WK, NumSuccess)
我正在尝试根据 "NumSuccesses" 中的值创建一个子集 data.frame "Data2",该子集对应于按 [=18= 分组的 "WK" 中的最大值].结果 data.frame 应如下所示:
>ID<-c('A','B','C')
>WK<-c(3, 3, 5)
>NumSuccess<-c(2, 1, 3)
>Data2<-data.frame(ID, WK, NumSuccess)
这可以通过不止一种方式完成。如果 'WK'、每个 'ID' 的最大值并希望所有行具有最大值 'WK',则 filter
与逻辑条件 (WK==max(WK)
) 按 'ID' 分组后。
library(dplyr)
Data %>%
group_by(ID) %>%
filter(WK==max(WK))
# ID WK NumSuccess
#1 A 3 2
#2 B 3 1
#3 C 5 3
如果每个 'ID' 有一个 'WK' 的 'max' 值,我们可以使用 which.max
或使用 arrange
通过 'WK' 每个 'ID'
Data %>%
group_by(ID) %>%
slice(which.max(WK))
# ID WK NumSuccess
#1 A 3 2
#2 B 3 1
#3 C 5 3
Data %>%
group_by(ID) %>%
arrange(-WK) %>%
slice(1)
data.table
中的类似方法是
library(data.table)
setDT(Data)[, .SD[max(WK)==WK], ID]
setDT(Data)[, .SD[which.max(WK)], ID]
setkey(setDT(Data), WK)[, .SD[.N], ID]
或者我们可以使用 base R
ave
Data[with(Data, ave(WK, ID, FUN=max)==WK),]