所以我有这个数据集
str(pcol)
'data.frame': 3130486 obs. of 20 variables:
$ body : Factor w/ 1623190 levels "","' i need to... '",..: 76837 ...
$ author : Factor w/ 18164 levels "--Kai--","--sunshine--",..: 11455 6643 8117 832 ...
$ ups : int 2 7 1 1 1 1 2 4 2 1 ...
....
制作表格显示以下内容:
table(pcol$author):
AuthornameX AuthornameY AuthornameZ ...
148 87 102
'table' int [1:18164(1d)] 129 5 152 67 18 25 58 319 44 204 ...
- attr(*, "dimnames")=List of 1
..$ : chr [1:18164] "--Kai--" "--sunshine--" "-0---0-" "-73-" ...
所以现在我想创建一个新数据集,只有作者在数据集中的次数超过100次。
我尝试了以下内容:
x <- subset(pcol, length(pcol$author) > 100 )
'table' int [1:2634(1d)] 129 152 319 204 157 177 198 106 144 437 ...
attr(*, "dimnames")=List of 1
..$ : chr [1:2634] "--Kai--" "-0---0-" "-Lolrax-" "-PTM-" ...
这种方式我限制了数量超过100的作者。但现在我遇到了如何从原始数据集中减去这些作者的问题。
我试过了:
> y <- subset(pcol, pcol$authors == x)
但是这留下了一个空白的数据框,其中有0个观察结果。
那么:我如何将原始数据集更改为新数据集,仅限于出现超过100次的作者?
My question is similar to this one, so potentially a duplicate.虽然问题已得到解答,但我无法将解决方案转移到我的问题上。这就是我提出问题的原因。
答案 0 :(得分:2)
使用data.table
包获取
require(data.table)
setDT(pcol)
找出发生次数超过100次的作者
author_sel <- pcol[, .N, by = .(author)][N > 100]
pcol[author %in% author_sel$author]
答案 1 :(得分:1)
基础解决方案可能
subset(pcol, author %in% names(which(table(pcol$author)>100)))
也许你应该考虑学习dplyr。 dplyr解决方案更易于阅读,并且可以更快地在您的计算机上运行。