我有一个数据框,其中有一列,列有一些数据和一些空单元格。 当我检查该列的级别时,它显示三个级别,因为它将空单元格作为一个级别。我想删除该级别。 假设我有
df <- data.frame(fan = c("a","b"," ","a","b"))
我试过这段代码
droplevels(df)
但它不起作用。
答案 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 = TRUE
或options
中有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