使用频率提取 R 中的变量
extracting variables in R using frequencies
假设我有一个数据框:
x y
a 1
b 2
a 3
a 4
b 5
c 6
a 7
d 8
a 9
b 10
e 12
b 13
c 15
我想创建另一个数据框,其中仅包含至少出现 3 次的 x
值(在本例中为 a
和 b
),以及它们对应的最高 y
值。
所以我希望输出为:
x y
a 9
b 13
这里9
和13
分别是a
和b
的最大值
我尝试使用:
sort-(table(x,y))
但是没有用。
这里有一个方法,使用subset
省略任何出现次数少于3次的x
,然后aggregate
按组求最大值:
d <- read.table(text='x y
a 1
b 2
a 3
a 4
b 5
c 6
a 7
d 8
a 9
b 10
e 12
b 13
c 15', header=TRUE)
with(subset(d, x %in% names(which(table(d$x) >= 3))),
aggregate(list(y=y), list(x=x), max))
# x y
# 1 a 9
# 2 b 13
为了更好的衡量,dplyr
方法:
library(dplyr)
d %>%
group_by(x) %>%
filter(n() >= 3) %>%
summarise(max(y))
# Source: local data frame [2 x 2]
#
# x max(y)
# 1 a 9
# 2 b 13
data.table
包非常适合这个。如果df
是原始数据,可以做
library(data.table)
setDT(df)[, .(y = max(y)[.N >= 3]), by=x]
# x y
# 1: a 9
# 2: b 13
.N
是一个整数,它告诉我们每个组中有多少行(我们在这里设置为 x
)。所以我们只是子集 max(y)
这样 .N
至少是三个。
假设我有一个数据框:
x y
a 1
b 2
a 3
a 4
b 5
c 6
a 7
d 8
a 9
b 10
e 12
b 13
c 15
我想创建另一个数据框,其中仅包含至少出现 3 次的 x
值(在本例中为 a
和 b
),以及它们对应的最高 y
值。
所以我希望输出为:
x y
a 9
b 13
这里9
和13
分别是a
和b
的最大值
我尝试使用:
sort-(table(x,y))
但是没有用。
这里有一个方法,使用subset
省略任何出现次数少于3次的x
,然后aggregate
按组求最大值:
d <- read.table(text='x y
a 1
b 2
a 3
a 4
b 5
c 6
a 7
d 8
a 9
b 10
e 12
b 13
c 15', header=TRUE)
with(subset(d, x %in% names(which(table(d$x) >= 3))),
aggregate(list(y=y), list(x=x), max))
# x y
# 1 a 9
# 2 b 13
为了更好的衡量,dplyr
方法:
library(dplyr)
d %>%
group_by(x) %>%
filter(n() >= 3) %>%
summarise(max(y))
# Source: local data frame [2 x 2]
#
# x max(y)
# 1 a 9
# 2 b 13
data.table
包非常适合这个。如果df
是原始数据,可以做
library(data.table)
setDT(df)[, .(y = max(y)[.N >= 3]), by=x]
# x y
# 1: a 9
# 2: b 13
.N
是一个整数,它告诉我们每个组中有多少行(我们在这里设置为 x
)。所以我们只是子集 max(y)
这样 .N
至少是三个。