根据另外两列 R 选择一行

  • 本文关键字:选择 一行 两列 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的方法,但卡在这里,因为这似乎仅适用于变量,不能用于子集数据框。(这没有导致任何接近,所以我不会发布该方法(

我们可以做

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"频率"并为每个"L"选择第一个"M">

setDT(df)[order(-freq), .(M = M[1]) , L]

另一种使用dplyr的解决方案

df %>% group_by(L) %>% top_n(1, freq) %>% .$M
#### [1] h j l h j l

最终在最后变成角色...

最新更新