示例数据:https://www.dropbox.com/s/f3l2uub1cttwmf2/test.csv?dl=0
我需要仅基于另一个数据集上可用的县代码(fips)来对此data.frame进行子集化。我有一个来自其他数据集的所有fips代码的列表,并且我试图删除列表中没有的所有fips代码,但是没有太多运气。
从这个小样本数据集中有三个fips(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的请求:
输出(头部(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。
答案 0 :(得分:1)
您可以尝试使用data.table
library(data.table)
setkey(setDT(prism.d), fips)
fips <- c(8009, 8011)
fips1 <- data.table(fips)
Subpr <- prism.d[fips1]
我认为以前的代码不起作用,因为我认为数据集是data.frame
而不是data.table
。尝试
fips2 <- fips #renaming because `prism.d` has the `same` column name `fips`
prism.d[fips %in% fips2]
prism.d <- read.csv('test-1.csv')