Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将NA替换为“&引用;,但仅在字符列中_R_For Loop_Data.table - Fatal编程技术网

R 将NA替换为“&引用;,但仅在字符列中

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

我有一个大数据集,大约有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  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})]