Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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
为什么';t摘要(tibble())报告NA';在chr列中是什么?_R_Tibble - Fatal编程技术网

为什么';t摘要(tibble())报告NA';在chr列中是什么?

为什么';t摘要(tibble())报告NA';在chr列中是什么?,r,tibble,R,Tibble,我对存储在TIBLE中的数据进行了一些数据清理,结果将一些空字符串观察值转换为NA,然后在调用summary(df)检查我的工作时,这些观察值似乎消失了,这让我反复感到困惑。使用tibble()NA时,似乎只报告非字符列。为什么会这样?这是故意的吗?如果是,为什么 最简单的例子: tdf a b c #>长度:3分钟:1.0 a:1 #>类别:字符第一区:1.5B:1 #>模式:字符中位数:2.0 c:1 #>平均值:2.0 #>第三部分:2.5 #>最大值:3.0 #但其他列类型中的NA将是

我对存储在TIBLE中的数据进行了一些数据清理,结果将一些空字符串观察值转换为
NA
,然后在调用
summary(df)
检查我的工作时,这些观察值似乎消失了,这让我反复感到困惑。使用
tibble()
NA
时,似乎只报告非字符列。为什么会这样?这是故意的吗?如果是,为什么

最简单的例子:

tdf a b c
#>长度:3分钟:1.0 a:1
#>类别:字符第一区:1.5B:1
#>模式:字符中位数:2.0 c:1
#>平均值:2.0
#>第三部分:2.5
#>最大值:3.0
#但其他列类型中的NA将是
tdf[3,2:3]a b c
#>长度:3分钟:1.00A:1
#>类别:第一区字符:1.25B:1
#>模式:字符中位数:1.50 c:0
#>平均值:1.50纳:1
#>第三节:1.75
#>最多:2.00
#>纳什:1
#此行为与data.frame不同
ddf a b c
#>苹果:1分钟:1.0A:1
#>梨:1第一曲:1.5b:1
#>NA:1中位数:2.0摄氏度:1
#>平均值:2.0
#>第三部分:2.5
#>最大值:3.0
ddf[3,2:3]a b c
#>苹果:1分钟:1.00A:1
#>梨:1第一曲:1.25B:1
#>不适用:1中位数:1.50摄氏度:0
#>平均值:1.50纳:1
#>第三节:1.75
#>最多:2.00
#>纳什:1

由(v0.2.0)于2018-03-01创建。

这是因为当您在data.frame中创建列“a”时,它们被定义为因子(请参见stringsAsFactors)。在TIBLE中创建列时,它是字符类型列

class(ddf$a)
"factor"

class(tdf$a)
"character"
如果使用stringsAsFactors=FALSE创建data.frame,您将看到它的行为类似于一个tibble

ddf <- data.frame(a = c("apple", "pear", NA), 
              b = 1:3, c = factor(letters[1:3]), stringsAsFactors = FALSE)

class(ddf$a)
"character"
ddf为什么?
可能是一种设计选择

如何解决此问题:
您可以使用
lappy
table()
参数
useNA=“always”
“ifany”


tdf%%>%groupby(a)%%>%tally
将为您提供
NA
的计数,它确实解释了差异,同时显示
summary
从不显示字符列中NA的数量,无论数据结构如何,这是很好的了解,因此我正在投票。我仍然想知道为什么
summary()
会报告这一点:例如,如果我调用
sum(is.na(ddf$a))
我会得到任何字符向量中
na
的数目。当调用is.na()时,它会返回TRUE或FALSE。在数字中,TRUE为1,FALSE为0。因此,总和将是向量中有多少个真。试试看:
as.numeric(TRUE)
as.numeric(FALSE)
。这显然是我的观点,例如
sappy(df,function(x){sum(is.na(x))}
会告诉我整个data.frame或tibble的每列中有多少
na
。重点不是“如何计算NA”(这很简单),重点是为什么summary不报告字符向量中的
NA
,summary报告因子向量中
NA
的数量,因为NA是向量的另一个级别。你可以看到,它还报告了梨和苹果的数量。可以看出,NAs被报告为
NA的
,我认为它是这样编码的,因为它不依赖于使用的级别。在字符类型向量中,未实现此“功能”。为什么不呢?我不知道。我不认为
NA
是一种因素。e、 感谢你抽出时间,但我的问题是为什么我不知道。但是,我想为未来的访问者提供它。
tdf <- tibble::tibble(a = c("apple", "pear", NA, NA), 
                      b = 1:4, c = factor(letters[1:4]), 
                      d = c("apple", "pear", "peach", NA))
lapply(tdf, function(x){table(x, useNA = "always")})
# $a
# x
# apple  pear  <NA> 
#     1     1     2 
# $b
# x
#   1    2    3    4 <NA> 
#   1    1    1    1    0 
# $c
# x
#   a    b    c    d <NA> 
#   1    1    1    1    0 
# $d
# x
# apple peach  pear  <NA> 
#     1     1     1     1 
tdf %>% group_by(a) %>% tally
# # A tibble: 3 x 2
#       a     n
#   <chr> <int>
# 1 apple     1
# 2  pear     1
# 3  <NA>     2