在因子级别使用子集不起作用

时间:2018-04-09 18:24:37

标签: r

我有一个非常简单的问题,不知怎的,我无法解决它,尽管有两个小时的努力。如果没有向您发送数据,我必须用文字和非常少的代码来解释我的问题。

我有一个包含多个变量和一个因子(const input: <Your_Type_Here> = {...)的数据框(elecData)。我想要做的就是创建一个新的数据框,选择一个因子级别Partido,这样我就有了一个数据框,其中只有Podemos作为因子Podemos的行存在。我使用的代码如下:

Partido

出于某种原因,新数据框不会仅选择预期的级别(PodemosSort=subset(elecData, subset=elecData$Partido=="Podemos")),而是选择因子的所有级别。此外,我在一个简单的数据帧上使用了子集函数,我查看它是否有效并且确实如此。为什么在这种情况下不起作用?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

df <- data.frame(A = 1:4, B = factor(c("AA","BB","BB","AA"), levels = c( AA","BB")))
df
#   A  B
# 1 1 AA
# 2 2 BB
# 3 3 BB
# 4 4 AA

检查列类

sapply(df,class)
#        A         B 
# "integer"  "factor" 

因子列"B"

的级别
 levels(df$B)   
 # [1] "AA" "BB"

级别为"BB"

的行
df[df$B == "BB",]
# A  B
# 2 2 BB
# 3 3 BB

使用table()函数

的级别为“AA”,“BB”的行数
table(df$B)

#  AA BB 
#   2  2 

使用subset()功能

subset(df, df$B == "BB")  
#  A  B
# 2 2 BB
# 3 3 BB

要删除频率计数为0的级别,请使用droplevels()功能。如果存在频率为0的任何级别。

levels(df$B) <- droplevels(df$B)
levels(df$B)