【发布时间】:2015-02-01 21:16:45
【问题描述】:
样本数据:https://www.dropbox.com/s/f3l2uub1cttwmf2/test.csv?dl=0
我需要仅根据在另一个数据集上可用的县代码 (fips) 对该 data.frame 进行子集化。我有一个来自其他数据集的所有 fips 代码的列表,我正在尝试删除所有不在列表中的代码,但运气不佳。
从这个小样本数据集中有三个 fip (8009,8011,8013),那么在这将是一个列表的情况下,我将如何删除除 8009 和 8011 之外的所有内容。
这是我尝试过的:
prism.dd <- prism.d[(prism.d$fips %in% fips) ,]
fips 是要保留的 779 个 fips 的列表:
fips <- unique(DustBowlData_Pre$fips)
但它只返回相同的数字。最好使用带有 data.table 的解决方案,但最好的解决方案也可以。
谢谢!
编辑:更新 akrun 的请求:
dput 的输出(head(fips))
c(8009L, 8011L, 8013L, 8017L, 8035L, 8039L)
更新:str(prism.d)
Classes ‘data.table’ and 'data.frame': 52802 obs. of 3 variables:
$ fips: int 30061 30063 30077 30049 30013 30059 30045 30027 30069 30033 ...
$ Year: int 1910 1910 1910 1910 1910 1910 1910 1910 1910 1910 ...
$ ppt : num 87 64.2 52.4 46.6 34.9 ...
- attr(*, ".internal.selfref")=<externalptr>
解决方案:
setkey(setDT(prism.d), fips)
fips <- unique(DustBowlData_Pre$fips)
fips <- data.table(fips)
Subpr <- prism.d[fips]
感谢@akrun!这非常有效。我真的需要学习data.table。
【问题讨论】:
标签: r dataframe data.table subset