R编程数据框——基于位置的返回值
R programming data frame - returning value based on position
我想知道是否有一种方法可以根据向量中的位置提取值,例如我有一个包含两个向量的数据框,我将它们从原始数据中按 V1 分组,然后按 V2 分组,很像 SQL 中的 ORDER BY。当我尝试找出每个 V1 组类型的第 3 分钟时,我的问题出现了。
有序数据框...
V1 V2
Ford 18
Ford 16
Ford 15
Ford 14
Ford 12
**Ford 5**
Ford 2
Ford 1
Nisan 10
Nisan 9
Nisan 8
Nisan 7
Nisan 6
**Nisan 5**
Nisan 4
Nisan 3
Toyota 20
Toyota 19
Toyota 15
Toyota 12
Toyota 11
**Toyota 10**
Toyota 6
Toyota 2
我想要在新数据框中的结果,每个变量的第 3 个最小值...
V1 V2
Ford 5
Nisan 5
Toyota 10
提前致谢。
尝试
library(data.table)#v1.9.5+
setDT(df1)[order(V2), list(V2=V2[3L]), by = V1]
或者如评论中提到的@DavidArenburg
setDT(df1)[, .SD[frank(V2, ties.method = "dense") == 3L], by = V1]
或者
library(dplyr)
df1 %>%
group_by(V1) %>%
filter(rank(V2)==3)
或者
df1 %>%
group_by(V1) %>%
arrange(V2) %>%
slice(3L)
使用 base R 你可以做类似
aggregate(V2 ~ V1, df[order(df$V2), ], `[`, 3L)
# V1 V2
# 1 Ford 5
# 2 Nisan 5
# 3 Toyota 10
或者(根据@akruns 评论)使用ave
df[with(df, ave(V2, V1, FUN = order)) == 3L,]
我想知道是否有一种方法可以根据向量中的位置提取值,例如我有一个包含两个向量的数据框,我将它们从原始数据中按 V1 分组,然后按 V2 分组,很像 SQL 中的 ORDER BY。当我尝试找出每个 V1 组类型的第 3 分钟时,我的问题出现了。
有序数据框...
V1 V2
Ford 18
Ford 16
Ford 15
Ford 14
Ford 12
**Ford 5**
Ford 2
Ford 1
Nisan 10
Nisan 9
Nisan 8
Nisan 7
Nisan 6
**Nisan 5**
Nisan 4
Nisan 3
Toyota 20
Toyota 19
Toyota 15
Toyota 12
Toyota 11
**Toyota 10**
Toyota 6
Toyota 2
我想要在新数据框中的结果,每个变量的第 3 个最小值...
V1 V2
Ford 5
Nisan 5
Toyota 10
提前致谢。
尝试
library(data.table)#v1.9.5+
setDT(df1)[order(V2), list(V2=V2[3L]), by = V1]
或者如评论中提到的@DavidArenburg
setDT(df1)[, .SD[frank(V2, ties.method = "dense") == 3L], by = V1]
或者
library(dplyr)
df1 %>%
group_by(V1) %>%
filter(rank(V2)==3)
或者
df1 %>%
group_by(V1) %>%
arrange(V2) %>%
slice(3L)
使用 base R 你可以做类似
aggregate(V2 ~ V1, df[order(df$V2), ], `[`, 3L)
# V1 V2
# 1 Ford 5
# 2 Nisan 5
# 3 Toyota 10
或者(根据@akruns 评论)使用ave
df[with(df, ave(V2, V1, FUN = order)) == 3L,]