【问题标题】:R: Transfer numeric data and NA into stringR:将数字数据和 NA 转换为字符串
【发布时间】:2015-08-21 10:11:14
【问题描述】:

变量Recence_Connexion_Jrs由“NA”和一些数字(从1到100)组成,我试图使“NA”等于“No Open”,并将数字分成3组, 组的标签是字符串的类型。 例如:

Recence_Connexion_Jrs           Connexion
      NA                         No open
      NA                         No open
      NA                         No open
      1                        connexion 0-7
      10                       connexion 7-30

我使用的代码:

setDT(newdata)[!duplicated(newdata),Connexion:=ifelse(is.na(Recence_Connexion_jrs),
"No Open",cut(Recence_Connexion_jrs,breaks=c(-Inf,7,30,+Inf),
labels=c("connexion 0-7","connexion 7-30","connexion 30+")))]

但它给出了错误的结果。

我该如何解决?

【问题讨论】:

  • 请提供一个可重现的例子,包括输入和期望的输出。
  • 我认为setDT(newdata 后面缺少一个)
  • @Jaap 谢谢,已经更新了。
  • 你读过我链接的帖子吗?最好提供dput()

标签: r string data.table na


【解决方案1】:

我建议分两步执行此操作:(1) 使用 cut 和 (2) 使用 replace 作为 NA 值。

这是一个关于矢量的示例。没有理由你不能在data.table 中做类似的事情:

set.seed(123)
vec <- sample(c(1:40, NA), 100, TRUE)
new <- cut(vec, c(-Inf, 7, 30, +Inf), 
           labels=c("connexion 0-7", "connexion 7-30", "connexion 30+"))
new <- replace(as.character(new), is.na(new), "No open")

或者,在一个小的data.table 上让您更容易看到:

library(data.table)
DT <- data.table(vec = c(1, NA, 8, 20, NA, 32))
DT[, new := as.character(
  cut(vec, c(-Inf, 7, 30, +Inf),
      labels = c("connexion 0-7", "connexion 7-30", "connexion 30+")))][
        , new := replace(new, is.na(new), "No open")
      ][]    
#    vec            new
# 1:   1  connexion 0-7
# 2:  NA        No open
# 3:   8 connexion 7-30
# 4:  20 connexion 7-30
# 5:  NA        No open
# 6:  32  connexion 30+

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 2015-09-16
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2019-07-04
    • 2022-08-12
    • 1970-01-01
    相关资源
    最近更新 更多