【问题标题】:R ignores 0 valuesR 忽略 0 个值
【发布时间】:2015-03-25 10:30:42
【问题描述】:

我正在尝试根据有序变量(范围 0 到 10)创建一些描述性统计数据和直方图。我使用了以下命令:

class(data$var1)
describe(as.numeric(data$var1))

但是 R 从 1 开始,将“拒绝”值计算为另一个数值。

如何让 R 从 0 开始并忽略“拒绝”值?

谢谢。

编辑:我可以让 R 使用以下命令忽略“拒绝”值:

is.na (data$var1[data$var1=="Refusal"]) <- TRUE

但是当我搜索关于 0 值的可能解决方案时,我只找到有关如何忽略/删除 0 值的建议...

Edit2:这是我的数据样本,

 [1] 5       8       8       8       Refusal 10      8       Refusal 7      
  [10] 7       8       7       8       8       8       8       8       8      
  [19] 8       0       9       Refusal 6       10      7       7       9

如您所见,范围是从 0 到 10,但使用 R 库“psych”和命令“describe”,输出范围始终为 1 到 11,这会使整个统计数据无效。

> class(data$var1)
[1] "factor"
> describe(as.numeric(data$var1), na.rm=TRUE)
  vars    n mean   sd median trimmed  mad min max range  skew kurtosis   se
1    1 1115 8.38 1.94      9    8.57 1.48   1  11    10 -1.06     1.42 0.06

抱歉正在进行编辑,但我是 stackoverflow.com 的新手

【问题讨论】:

  • 抱歉,我漏掉了一个括号: class(data$var1) describe(as.numeric(data$var1))
  • 谢谢你,docendo discimus。 :-)
  • 它的重现性不太好是吗?
  • 您所包含的代码的输出是什么?如果第一行是"factor",您可以尝试describe(as.numeric(as.character(data$var1)),以便从因子到数字的转换按您的预期进行。

标签: r histogram


【解决方案1】:

通过?factor 或查看示例question here 了解因子的工作原理。本质上,每个级别都有一个从 1 开始的数字,因此如果您有 11 个唯一值,则以 11 结束。将因子转换为数字会返回这些代码,而不是它们相关的基础数字。为此,首先转换为字符,然后转换为数字。看看这些代码sn-ps的区别:

#create data
set.seed(0)
a <- factor(sample(c(0:10,"refusal"),50,T)) #Some dummy data
class(a)
# [1] "factor"

sn-p 1 - 你是怎么做的

describe(as.numeric(a),na.rm=TRUE)
#as.numeric(a) 
#n missing  unique    Mean     .05     .10     .25     .50     .75     .90     .95 
#50       0      11    6.28    2.00    2.00    4.00    6.00    8.75   10.00   11.00 
#
#1  2  3 4 5  6  7  8 9 10 11
#Frequency 2  5  5 4 2  8  6  5 3  6  4
#%         4 10 10 8 4 16 12 10 6 12  8

sn-p 2 - 正确方法

describe(as.numeric(as.character(a)),na.rm=TRUE)
#as.numeric(as.character(a)) 
#n missing  unique    Mean     .05     .10     .25     .50     .75     .90     .95 
#46       4      10   5.304     1.0     1.0     3.0     5.0     8.0     9.5    10.0 
#
#0  1 2 3  4  5  7 8  9 10
#Frequency 2  5 4 2  8  6  5 3  6  5
#%         4 11 9 4 17 13 11 7 13 11
#Warning message:
#  In describe(as.numeric(as.character(a)), na.rm = TRUE) :
#  NAs introduced by coercion

请注意范围的差异(即使我的 describe 函数与您的函数不同)。警告指的是“被转换为NAs 的拒绝,因为它们不代表数字

【讨论】:

  • 谢谢你,米夫。缺少一个括号(再次,我的错),这就是您的代码第一次无法正常工作的原因。也感谢您的解释,现在我可以看到我错在哪里了。我希望将来当 R 变得不那么“有问题”时,我能像你一样对你有所帮助。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
相关资源
最近更新 更多