基于每组行数的子集数据帧

基于每组行数的子集数据帧

我有这样的数据,其中一些“名字”出现超过3次:

df <- data.frame(name = c("a", "a", "a", "b", "b", "c", "c", "c", "c"), x = 1:9)

  name x1    a 12    a 23    a 34    b 45    b 56    c 67    c 78    c 89    c 9

我希望根据每个级别中的行数(观察)对数据进行子集(筛选)。name变量。如果某一水平name发生3次以上,我要删除属于该级别的所有行。所以在这个例子中,我们会删除观察name == c,因为有> 3该组中的行:

  name x1    a 12    a 23    a 34    b 45    b 5

我写了这段代码,但没能让它起作用。

as.data.frame(table(unique(df)$name))subset(df, name > 3)


陪伴而非守候
浏览 539回答 2
2回答

慕工程0101907

使用dplyr一揽子:df&nbsp;%>% &nbsp;&nbsp;group_by(name)&nbsp;%>% &nbsp;&nbsp;filter(n()&nbsp;<&nbsp;4)#&nbsp;A&nbsp;tibble:&nbsp;5&nbsp;x&nbsp;2#&nbsp;Groups:&nbsp;&nbsp;&nbsp;name&nbsp;[2] &nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;<fct>&nbsp;<int>1&nbsp;a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;34&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;45&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5n()返回当前组中的观察数,因此我们可以group_by名称,然后只保留属于该组中行数小于4的部分的行。
打开App,查看更多内容
随时随地看视频慕课网APP