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