删除'空单元'作为因子级别

时间:2014-08-27 08:17:50

标签: r

我有一个数据框,其中有一列,列有一些数据和一些空单元格。 当我检查该列的级别时,它显示三个级别,因为它将空单元格作为一个级别。我想删除该级别。 假设我有

df <- data.frame(fan = c("a","b"," ","a","b")) 

我试过这段代码

droplevels(df)

但它不起作用。

4 个答案:

答案 0 :(得分:3)

&#39; droplevels&#39;确实有效。无需复杂的代码:

df <- data.frame(fan = c("a","b"," ","a","b")) 
df
#  fan
#1   a
#2   b
#3    
#4   a
#5   b

df$fan[df$fan==' ']=NA
df$fan = droplevels(df$fan)
str(df)
#'data.frame':   5 obs. of  1 variable:
# $ fan: Factor w/ 2 levels "a","b": 1 2 NA 1 2

答案 1 :(得分:2)

当您将文件读取到R时,您可以避免“清空”单元格&#39;通过使用na.strings(或read.csv)中的read.xxx参数,首先将其作为因子级别包含在内。 na.strings参数定义&#34;字符串,这些字符串将被解释为NA值&#34;。

这是一个例子,我从你的&#39; df&#39;

中读取了一个文本文件(foo.csv)。
read.csv(file = "foo.csv", na.strings = " ")
#    fan
# 1    a
# 2    b
# 3 <NA>
# 4    a
# 5    b

str(as.factor(df2$fan))
# Factor w/ 2 levels "a","b": 1 2 NA 1 2

当读取文件时,空字段现在被视为NA,并且空白&#39;因此不包括在因子水平中。

来自?read.table:&#34;空白字段被认为是逻辑,整数,数字和复杂字段中的缺失值&#34;。但是,在您的数据中,变量&#34; fan&#34;是character。如果您在stringsAsFactors = TRUEoptions中有read.xxx,则character向量会转换为factor

答案 2 :(得分:1)

尝试:

 df$fan[grepl("^\\s*$", df$fan)] <- NA #in case you have  c(" ", "", "a", "b", "   ")

解释

^(|\\s+)$ - 如果有引号''或引号(" ", " ", " ")内的空格,则匹配。因此,更一般。

  str(droplevels(df))
  #'data.frame':    5 obs. of  1 variable:
  #$ fan: Factor w/ 2 levels "a","b": 1 2 NA 1 2

如果要创建删除空单元格的新数据集

  df1 <- droplevels(df[!grepl("^\\s*$", df$fan),,drop=FALSE] )
  str(df1)
  #'data.frame':    4 obs. of  1 variable:
  #$ fan: Factor w/ 2 levels "a","b": 1 2 1 2

答案 3 :(得分:0)

如果您使用的是csv,这可能会有所帮助:

data<-read.csv(file = "data.csv", na.strings = "", stringsAsFactors = T)

我修改了先前的回复并添加了, stringsAsFactors = T 因此,以后它将不会像在NA

中那样在任何后续分析中报告Createtableone