根据另外两列R选择一行

时间:2017-07-04 14:07:03

标签: r

我有一个数据框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方法,但是因为这似乎仅适用于变量而无法用于子集数据框的子集,因此卡在此处。 (这没有任何结果,所以我不会发布这个方法)

2 个答案:

答案 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

最终转变为角色......

相关问题