我正在使用几个函数,这将在我的数据整理工作流程中节省大量时间。 我正在尝试向 r 提供列列表。 我想循环遍历这些列来查找特定值。 当遇到这些值时,我想用 NA 替换它们,而不是保留这些值。 我的问题是有时我的数据中会有一些因素。 当我将它们强制返回数字形式时,这些函数没有获取感兴趣的值。 有什么方法可以解决这个问题吗? 这是我的代码以及从该代码获得的输出:
convert_factors_to_numeric <- function(df, columns) {
df %>%
mutate(across(all_of(columns), ~ if (is.factor(.x)) as.numeric(as.character(.x)) else .x))
}
handle_missing_values <- function(df, columns, missing_codes = c(-7, -5, -8, -9, 99)) {
df %>%
mutate(across(all_of(columns), ~ {
# Loop through each missing code and apply na_if
temp <- .x
for (code in missing_codes) {
temp <- na_if(temp, code)
}
temp
}))
}
library(dplyr)
# Sample reproducible data
set.seed(123)
df <- tibble(
age = c(15, 16, 17, 15, -9), # Added missing code (-9) to age
qn = factor(sample(c(1, 2, 3, -7, -9), 5, replace = TRUE)), # qntransgender as factor
q1 = factor(sample(1:2, 5, replace = TRUE)), # q1 as a factor
q2 = sample(1:5, 5, replace = TRUE),
q3 = sample(1:4, 5, replace = TRUE)
)
# Step 1: Convert factors to numeric
df_converted <- convert_factors_to_numeric(df, c("qn", "q1", "age"))
is.numeric(df_converted$q1)
# Step 2: Handle custom missing values (-7, -9, etc.)
df_final <- handle_missing_values(df_converted, c("qn", "q1", "age"))
print(df_final)
A tibble: 5 × 5
age qn q1 q2 q3
<dbl> <dbl> <dbl> <int> <int>
1 15 3 1 2 1
2 16 3 2 3 4
3 17 2 2 5 1
4 15 2 2 3 1
5 NA 3 1 3 1
如您所见,qn 在第 4 行和第 5 行中应该有两个 NA,如下所示:
A tibble: 5 × 5
age qn q1 q2 q3
<dbl> <dbl> <dbl> <int> <int>
1 15 3 1 2 1
2 16 3 2 3 4
3 17 2 2 5 1
4 15 NA 2 3 1
5 NA NA 1 3 1
我错过了什么?如何修复我的代码以获得此输出?
更简单:
handle_missing_values <- function(df, columns, missing_codes = c(-7, -5, -8, -9, 99)) {
df |> mutate(across(all_of(columns), ~na_if(.x, missing_codes)))
}