R 因子计数子集

R 因子计数子集,r,data-management,R,Data Management,我正在处理内布拉斯加州城市的统一犯罪报告数据(一个慷慨的分类),并以5年为增量计算了1995年至2010年主要分类的犯罪率 我想画出历年的犯罪率。 然而,由于UCR的报告方式,并非所有城市都报告了所有年份的数值 我对R相当陌生,但一位同事建议我尝试创建一个for循环,为每个城市名称提供唯一值的计数。然后我可以使用这些计数来删除数据或将数据子集,这样我至少有三个观测值可用于绘图。这是我所能做到的,但那是行不通的。不幸的是,我需要在本周剩下的时间里关注一些更紧迫的问题,所以我想我应该把它交给社区来获

我正在处理内布拉斯加州城市的统一犯罪报告数据(一个慷慨的分类),并以5年为增量计算了1995年至2010年主要分类的犯罪率

我想画出历年的犯罪率。 然而,由于UCR的报告方式,并非所有城市都报告了所有年份的数值

我对R相当陌生,但一位同事建议我尝试创建一个for循环,为每个城市名称提供唯一值的计数。然后我可以使用这些计数来删除数据或将数据子集,这样我至少有三个观测值可用于绘图。这是我所能做到的,但那是行不通的。不幸的是,我需要在本周剩下的时间里关注一些更紧迫的问题,所以我想我应该把它交给社区来获得一些见解

代码和名称数据如下所示。谢谢

drop = NULL
city.names <- unique(cnames)

for (i in 1:length(city.names)){
  x = sum(cnames==i)
 if (x < 3) {c(drop,i)}
} 
drop=NULL
city.names对于通过列的“频率”进行子集设置,在
base R
和其他包中有许多选项。一个选项是使用“cnames”列上的
table
函数获取频率。输出将是一个
向量
,其“键/值”对应于每个唯一“cnames”的
名称/频率
。检查值是否小于3(
tbl=
运算符)。
ave
以与原始数据集中相同的顺序返回输出。这可用于子集设置

 data[with(data, ave(seq_along(cnames), cnames, FUN=length)>=3),]
如果您使用的是
data.table
,则对于大型数据集,代码将更加紧凑且速度更快。使用
setDT
将“data.frame”转换为“data.table”,为每个唯一的“cnames”分配计数(
n:=.n
),最后使用
=/code>对数据集进行子集化

library(data.table)
setDT(data)[,n:=.N, cnames][n>=3]

您如何将数据读入R?您的代码中缺少这些数据。@AleksandrBlekh表示歉意。我希望这些更改能把事情弄清楚。没问题,无需道歉。现在更清楚了,虽然有点长。未来的建议:如果可能,尝试使用R或类似的服务。这是一个以R为中心的服务。也很好而且更全面。另外两个注意事项:1)我认为你的代码不是你想要的;2) 我在这个问题中没有看到统计组件,所以也许将它迁移到带有
r
标记的StackOverflow会引起更多的关注和更快的帮助(我将为您标记这个问题)。您可以使用
table
 data[with(data, ave(seq_along(cnames), cnames, FUN=length)>=3),]
library(data.table)
setDT(data)[,n:=.N, cnames][n>=3]