R 拆下';空单元格';as因子水平
我有一个数据框,它有一列,列有一些数据和一些空单元格。 当我检查该列的级别时,它显示了三个级别,因为它将空单元格作为一个级别。我想删除该级别。 如果我有R 拆下';空单元格';as因子水平,r,R,我有一个数据框,它有一列,列有一些数据和一些空单元格。 当我检查该列的级别时,它显示了三个级别,因为它将空单元格作为一个级别。我想删除该级别。 如果我有 df <- data.frame(fan = c("a","b"," ","a","b")) 但它不起作用。试试: df$fan[grepl("^\\s*$", df$fan)] <- NA #in case you have c(" ", "", "a", "b", " ") 如果要创建一个新的数据集并删除空单元格
df <- data.frame(fan = c("a","b"," ","a","b"))
但它不起作用。试试:
df$fan[grepl("^\\s*$", df$fan)] <- NA #in case you have c(" ", "", "a", "b", " ")
如果要创建一个新的数据集并删除空单元格
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
df1'droplevels'确实有效。不需要复杂的代码:
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
df当您将文件读取到R时,您可以通过使用read.csv
(或read.xxx
)中的na.strings
参数,首先避免将“空单元格”作为因子级别。na.strings
参数定义“将被解释为na
值的字符串”
下面是一个示例,其中我读取了从您的“df”创建的文本文件(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
read.csv(file=“foo.csv”,na.strings=”“)
#扇子
#1A
#2 b
# 3
#4A
#5 b
str(作为系数(df2$fan))
#系数w/2“a”、“b”级:1 2 NA 1 2
读取文件时,空字段现在被视为NA
,因此“blank”不包括在系数级别中
从?read.table
:“空白字段[…]被认为是逻辑、整数、数字和复杂字段中缺少的值”。但是,在数据中,变量“fan”是一个字符
。如果在选项中或在读取.xxx中有stringsAsFactors=TRUE
,则字符
向量将转换为因子
如果您使用的是csv,这可能会有帮助:
data<-read.csv(file = "data.csv", na.strings = "", stringsAsFactors = T)
数据\\s*
将比(|\\s+)
@哈德利更简单谢谢你的建议。我修改了代码这是正确的解决方案,如果问题实际上有空单元格,就像我做的那样。出于某种原因,我还没有完全弄清楚,通过readr::read.csv2导入的数据集中的一些空白单元格并没有作为NA导入,而是作为没有任何存储值或NA的空白单元格保留。因子列也没有将空白值记录为任何级别,即使它在同一个导入的不同列中发生。将空白单元格显式指定为NA解决了此问题。
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
data<-read.csv(file = "data.csv", na.strings = "", stringsAsFactors = T)