我有一个数据框df
df = data.frame(L = rep(letters[1:6], each = 2),
M = rep(letters[7:12]),
freq = sample(c(5, 10), replace = FALSE))
L M freq
1 a g 5
2 a h 10
3 b i 5
4 b j 10
5 c k 5
6 c l 10
7 d g 5
8 d h 10
9 e i 5
10 e j 10
11 f k 5
12 f l 10
我想为每个L选择最常见的M.
在此示例中,输出将显示:
h, j, l, h, j, l
频率不一定是实际问题中的每秒值。
我怎样才能轻松完成这项工作?
我尝试了tapply
方法,但是因为这似乎仅适用于变量而无法用于子集数据框的子集,因此卡在此处。 (这没有任何结果,所以我不会发布这个方法)
答案 0 :(得分:2)
我们可以做到
library(data.table)
setDT(df)[, .(M = M[which.max(freq)]), L]
# L M
#1: a h
#2: b j
#3: c l
#4: d h
#5: e j
#6: f l
或order
'freq'并为每个'L'选择第一个'M'
setDT(df)[order(-freq), .(M = M[1]) , L]
答案 1 :(得分:1)
使用dplyr
df %>% group_by(L) %>% top_n(1, freq) %>% .$M
#### [1] h j l h j l
最终转变为角色......