Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.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
如何替换所有<;NA>;使用forcats::fct_explicit_na()的data.frame中的值?_R_Tidyverse_Forcats - Fatal编程技术网

如何替换所有<;NA>;使用forcats::fct_explicit_na()的data.frame中的值?

如何替换所有<;NA>;使用forcats::fct_explicit_na()的data.frame中的值?,r,tidyverse,forcats,R,Tidyverse,Forcats,我有一个包含19个变量的数据框架,其中17个是因子。其中一些因子包含缺失值,编码为NA。我想使用forcats::fct_explicit_na()将缺失重新编码为一个单独的因子级别,用于数据框中的所有因子 有两个因素变量的小示例: df <- structure(list(loc_len = structure(c(NA, NA, NA, NA, NA, NA, 1L, 1L, 3L, 1L), .Label = c("No", "< 5 sec", "5 sec - <

我有一个包含19个变量的数据框架,其中17个是因子。其中一些因子包含缺失值,编码为NA。我想使用forcats::fct_explicit_na()将缺失重新编码为一个单独的因子级别,用于数据框中的所有因子

有两个因素变量的小示例:

df <- structure(list(loc_len = structure(c(NA, NA, NA, NA, NA, NA, 
1L, 1L, 3L, 1L), .Label = c("No", "< 5 sec", "5 sec - < 1 min", 
"1 - 5 min", "> 5 min", "Unknown duration"), class = "factor"), 
    AMS = structure(c(1L, 2L, NA, 1L, 1L, NA, NA, NA, NA, NA), .Label = c("No", 
    "Yes"), class = "factor")), .Names = c("loc_len", "AMS"), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

table(df$loc_len, useNA = "always")

              No          < 5 sec  5 sec - < 1 min        1 - 5 min          > 5 min Unknown duration             <NA> 
               3                0                1                0                0                0                6 
现在是:

$loc_len
                 x Freq
1               No    3
2          < 5 sec    0
3  5 sec - < 1 min    1
4        1 - 5 min    0
5          > 5 min    0
6 Unknown duration    0
7        to_impute    6
8             <NA>    0

$AMS
          x Freq
1        No    3
2       Yes    1
3 to_impute    6
4      <NA>    0
$loc\u len
x频率
1号3号
2小于5秒0
3.5秒-<1分钟1
4 1-5分钟0
5>5分钟0
6未知持续时间0
7至6
8                 0
$AMS
x频率
1号3号
2是的1
3至6
4          0

经过反复试验,下面的代码符合我的要求

library(tidyverse)

df[, f_names] <- lapply(df[, f_names], function(x) fct_explicit_na(x, na_level = "to_impute")) %>% as.data.frame
库(tidyverse)
df[,f_名称]%as.data.frame

更好的是,由以下人员提供的优雅且惯用的解决方案:


请给出一个小的可复制示例和预期结果。这很整洁。
lapply(df_new, function(x) data.frame(table(x, useNA = "always")))
$loc_len
                 x Freq
1               No    3
2          < 5 sec    0
3  5 sec - < 1 min    1
4        1 - 5 min    0
5          > 5 min    0
6 Unknown duration    0
7        to_impute    6
8             <NA>    0

$AMS
          x Freq
1        No    3
2       Yes    1
3 to_impute    6
4      <NA>    0
library(tidyverse)

df[, f_names] <- lapply(df[, f_names], function(x) fct_explicit_na(x, na_level = "to_impute")) %>% as.data.frame
library(dplyr)
df = df %>% mutate_if(is.factor,
                      fct_explicit_na,
                      na_level = "to_impute")