在子集上使用表获得整个DF而不是子集的频率

时间:2012-02-24 20:28:23

标签: r

我正在使用子集从列值集合中提取

我有一个带有多个列的DF,其中一个是状态。我需要为状态获取频率,但仅针对某些状态。所以我有这个:

tmp <- subset(DF, DF$STATE %in% SOMESTATES)
a   <- as.data.frame(table(tmp$STATE))

这几乎没问题。 tmp数据框只有属于SOMESTATES集的记录,很好。

问题是。表结果是整个DF的完整频率,而不仅仅是tmp。另一个没有值。

我的问题是SOMESTATES中的某些状态在DF中没有出现,这使我无法使用droplevels。 droplevels也取出那些零值。在这里:

例如,如果我使用这样的droplevel,我会松开我需要的某些状态的零值。

tmp <- subset(DF, DF$STATE %in% SOMESTATES)
tmp2 <- droplevels(tmp)
table(tmp2$STATE)

不仅呈现了SOMESTATES

中的所有州

任何建议表示赞赏

2 个答案:

答案 0 :(得分:2)

尝试类似:

tmp <- subset(DF, DF$STATE %in% SOMESTATES) 
tmp$STATE <- factor(tmp$STATE, levels=SOMESTATES) 
table(tmp$STATE) 

因子函数会将其重新创建为一个新因子,其级别与SOMESTATES完全匹配。那些不在SOMESTATES中的州将不会被包括在内,因为它们既不在数据中也不在SOMESTATES中,但SOMESTATES中包含0个计数的州仍将包含在因子中,因此该表有0个计数。

另请注意,因子级别将按SOMESTATES排序,因此该向量中的顺序将是使用它的表格或图表中显示的顺序。通常这是良性或有用的。

答案 1 :(得分:0)

使用table(factor(tmp$STATE))table(tmp$STATE[, drop=T])。两者都将保留原始级别的订单。