【问题标题】:Considering all the blank values as variable "NA" without hard coding [closed]将所有空白值视为变量“NA”而无需硬编码[关闭]
【发布时间】:2017-12-22 13:12:40
【问题描述】:

我有一个数据集,其中包含空值,我想在一般说明中知道,我想将这些空值视为公共字符值,而不在数据中分配或硬编码任何值,这样null 也被认为是一个变量。例如:假设有两个向量:

a1 <- c("a1","a2","","a3")
a2 <- c("b1","b2","b3","b4")
a12 <- data.frame(a1,a2)

基本上,我有一个更大的数据,将所有空白值都视为“na”,而不为空白字段分配任何值。

【问题讨论】:

  • 你能告诉我们你想对数据框做什么
  • 作为空元素名称的旁注:注意 NULL 值与空字符串不同 '': identical(c('a','b',NULL),c('a','b')) # --&gt; TRUE 所以 NULL 值真的什么都不是,不像空字符串'' 或缺失值NA
  • @BertilBaron,看到我有两列 a1 和 a2,问题是“a1”有 na 值。当我绘制条形图时,“na”会在图表中引入错误,但是用变量“na”对“na”值进行硬编码就可以了,我想将空白值用作公共变量,例如“na”后端而不修改数据集。
  • @BertilBaron,您好我解决了这个问题,我基本上是想在空值创建问题的事件日志数据集中创建跟踪。请帮我写这篇文章,因为我正在努力寻找修复,stackoverflow.com/questions/47951307/…
  • 如果这里提供了任何解决方案,请选择一个帖子接受它作为答案。请参阅此帖子以了解如何操作:meta.stackexchange.com/questions/5234/…

标签: r shiny dplyr tidyr


【解决方案1】:

R base 完成这项工作。试试a12[a12 == ""] &lt;- NA

a12
#    a1 a2
#1   a1 b1
#2   a2 b2
#3 <NA> b3
#4   a3 b4

【讨论】:

  • 感谢回复,看你能不能帮帮我,我不希望在数据中分配NA并修改它,只考虑一个空白值作为后端的公共变量。最终用户应该只看到一个空白值。
  • 如果我没听错的话,您不需要将空白值设置为NA,不是吗?你到底想做什么?
  • 如果这只是关于打印,您可以创建一个class 和一个关联的print 方法
  • 我想知道有没有办法,我可以将这些空白值视为“NA”,而无需实际对其进行硬编码。
  • a12[a12 == ""] &lt;- NA 就是这样做的。您在 R 中看到的 NA 只是一个缺失值指示符 - 它与空白单元格不同。检查此测试的结果is.na("") == is.na(NA)。使用xlsx::write.xlsx(a12, "a12.xlsx", showNA = FALSE) 将数据导出到Excel 文件,您可以看到NA 在Excel 中表示为空白单元格。
【解决方案2】:

另一种可能性是将is.na&lt;- 与(逻辑)索引向量一起使用。

is.na(a12) <- a12 == ""
a12
#    a1 a2
#1   a1 b1
#2   a2 b2
#3 <NA> b3
#4   a3 b4

请注意,数字索引向量 which(a12 == "") 也可以完成这项工作。

【讨论】:

【解决方案3】:

dplyr 解决方案:

在管道内临时为空字符串分配NA值:

a12%>% mutate_all(. %>% ifelse(. == '',NA,.)) %>% ....

(或相同,更长但更传统的语法:

a12%>% mutate_all(function(x) ifelse(x == '', NA, x)) %>% ....

在此之后,再加上%&gt;% ...,您可能会对您的数据做一些事情

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 2014-03-27
  • 2017-08-17
  • 1970-01-01
相关资源
最近更新 更多