Ker*_*rry 4 r subset data.table
这必须是一个简单的答案.我想将我的数据子集用于测试目的.我有一个数据框,我想保留所有信息列,只需简单地减少每个人的观察数量.所以,我有一个独特的标识符和大约50个人.我想只选择2个AND,我想从这2个中仅选择500个数据点.
我的数据框被调用wloc08.有50个唯一ID.我只接受其中2个,但是那些2个,我只想要每个500个数据点.
subwloc08=subset(wloc08, subset = ID %in% c("F07001","F07005"))
Run Code Online (Sandbox Code Playgroud)
在这个声明的某处可以使用[吗?
reduced= subwloc08$ID[1:500,]
Run Code Online (Sandbox Code Playgroud)
不行.
如果你只处理2个人,那么你可以分别rbind对每个子集进行子集化,然后对每个子集进行子集化:
wloc08F07001 <- wloc08[which(wloc08$ID == "F07001")[1:500], ]
wloc08F07005 <- wloc08[which(wloc08$ID == "F07005")[1:500], ]
reduced <- rbind(wloc08F07001, wloc08F07005)
Run Code Online (Sandbox Code Playgroud)
为了使其更具通用性,特别是在处理大量数据时,您可以考虑查看data.table包.这是一个例子
library(data.table)
wloc08DT<-as.data.table(wloc08) # Create data.table
setkey(wloc08DT, "ID") # Set a key to subset on
# EDIT: A comment from Matthew Dowle pointed out that by = "ID" isn't necessary
# reduced <- wloc08DT[c("F07001", "F07005"), .SD[1:500], by = "ID"]
reduced <- wloc08DT[c("F07001", "F07005"), .SD[1:500]]
Run Code Online (Sandbox Code Playgroud)
要打破最后一步的语法:
c("F07001", "F07005"):这将通过查找键等于F07001或的所有行来对数据进行子集化F07005.它还将鼓励"不经"(详见?data.table详情)
.SD[1:500]:这将.SD通过选择行1:500来对对象(子集化data.table)进行子集化.
编辑由于Matthew Dowle的更正,此部分已删除."by by by"由步骤1启动.以前:( by = "ID":告诉[.data.table我们单独为每个ID执行步骤2中的操作,在这种情况下只显示您在步骤1中指示的ID.)