【问题标题】:Subsetting a factor on amount of observations in R对 R 中观察量的因子进行子集化
【发布时间】:2016-07-25 07:56:50
【问题描述】:

所以我有这个数据集

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. 虽然问题已得到解答,但我无法将解决方案转移到我的问题上。这就是我提出问题的原因。

Here is a 10.000 rows sample of my data set

【问题讨论】:

标签: r


【解决方案1】:

使用data.table包一会得到

require(data.table)
setDT(pcol)

查找出现次数超过 100 次的作者

author_sel <- pcol[, .N, by = .(author)][N > 100]
pcol[author %in% author_sel$author]

【讨论】:

    【解决方案2】:

    基本解决方案可以是

    subset(pcol, author %in% names(which(table(pcol$author)>100)))
    

    也许你应该考虑学习 dplyr。 dplyr 解决方案在您的计算机上更易于阅读且运行速度更快。

    【讨论】:

    • 我添加了一个样本数据集。我尝试了你的命令行,但可惜有很多作者出现的次数少于 100。也许样本数据集可以让您更好地了解我想知道的内容
    • 这是否解决了您的问题?
    • 可惜没有。我使用了 stefan8888 的建议。但无论如何,谢谢你的帮助!
    • 我在您发表第一条评论时将其修复。 nbd,@stefan8888 有一个很好的解决方案。
    • 嗯,好的。我没有注意到这一点。我刚刚尝试了你的命令,它也很有效。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多