R:将数值数据和NA转成字符串
R: Transfer numeric data and NA into string
变量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+")))]
但是给出了错误的结果。
我该如何解决?
我建议分两步执行此操作:(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+
变量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+")))]
但是给出了错误的结果。
我该如何解决?
我建议分两步执行此操作:(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+