Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 拆下';空单元格';as因子水平_R - Fatal编程技术网

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)