R 将NA替换为“&引用;,但仅在字符列中
我有一个大数据集,大约有200列不同类型的数据。我需要将R 将NA替换为“&引用;,但仅在字符列中,r,for-loop,data.table,R,For Loop,Data.table,我有一个大数据集,大约有200列不同类型的数据。我需要将NA值替换为”,但仅在字符列中 使用虚拟数据表 DT <- data.table(x = c(1, NA, 2), y = c("a", "b", NA)) > DT x y 1: 1 a 2: NA b 3: 2 <NA> > str(DT) Classes ‘data.table’ and 'data.frame': 3 obs. of
NA
值替换为”
,但仅在字符列中
使用虚拟数据表
DT <- data.table(x = c(1, NA, 2),
y = c("a", "b", NA))
> DT
x y
1: 1 a
2: NA b
3: 2 <NA>
> str(DT)
Classes ‘data.table’ and 'data.frame': 3 obs. of 2 variables:
$ x: num 1 NA 2
$ y: chr "a" "b" NA
循环运行时没有错误,但不会更改DT
我期望的结果是:
x y
1: 1 a
2: NA b
3: 2
解决方案不一定要包含循环,但我想不出循环。如果您不介意使用dplyr,请选择一个选项:
na_to_space <- function(x) ifelse(is.na(x)," ",x)
> DT %>% mutate_if(.predicate = is.character,.funs = na_to_space)
x y
1 1 a
2 NA b
3 2
na_to_space DT%>%mutate_if(.predicate=is.character,.funs=na_to_space)
xy
11A
2钠硼
3 2
如果您不介意使用dplyr,请选择一个选项:
na_to_space <- function(x) ifelse(is.na(x)," ",x)
> DT %>% mutate_if(.predicate = is.character,.funs = na_to_space)
x y
1 1 a
2 NA b
3 2
na_to_space DT%>%mutate_if(.predicate=is.character,.funs=na_to_space)
xy
11A
2钠硼
3 2
取代
DT[, names(DT) := map(.SD, ~{if(is.character(.x)) .x[is.na(.x)] <- ' '; .x})]
DT[,name(DT):=map(.SD,~{if(is.character(.x)).x[is.na(.x)]
取代
DT[, names(DT) := map(.SD, ~{if(is.character(.x)) .x[is.na(.x)] <- ' '; .x})]
DT[,names(DT):=map(.SD,~{if(is.character(.x)).x[is.na(.x)]如果你想让你的循环工作,试试这个:for(i in 1:ncol(DT)){if(class(names(DT)[i]){DT is.na(get(names(DT)[i])),names(DT i]:=''}}
如果你想让你的循环工作,试试这个:for(i in 1:ncol(DT i:ncol)(class(names)){(DT)[i])==“character”){DT[is.na(get(names(DT)[i])),names(DT)[i]:=”“]}
DT[, names(DT) := map(.SD, ~{if(is.character(.x)) .x[is.na(.x)] <- ' '; .x})]