如何将特定列中的所有 NA 重命名为 0,然后在整个数据帧中删除这些行(0)?

问题描述 投票:0回答:1

我有一个包含 298 个变量的 50,000 个 obs 的数据框,其中有一列计算调查中人员的年龄。我想排除所有回答 0(15 岁以下)和 NA 的人,因为我将查看数据集中与工资相关的列。如果我想将所有 NA 变为 0,然后从该列中删除所有 0(并从数据帧的其余部分中删除这些行),我该怎么做?

我尝试创建一个复制的数据帧(df_2),并将所有 NA 重命名为 0,然后使用以下命令删除它们:

df_2$q1 <- ifelse(is.na(df_1$q1), 0, df_1$q1)
df_2[df_2$q1 != 0, ]

但这不起作用

例如,这是我的开始数据框:

col1 col2 col3 col4
r1 不适用 1 0 1
r2 0 1 1 1
r3 1 1 0 1
r4 1 0 1 1
r5 不适用 1 0 1

我想得到这个结果数据框:

col1 col2 col3 col4
r1 1 1 0 1
r2 1 0 1 1
r dataframe na
1个回答
0
投票

您可以使用

NA
0
中的
col1
删除所有行:

df_2 = df_1[!df_1$col1 %in% c(NA, 0), ]

或者如果您愿意的话

dplyr

library(dplyr)
df_2 = df_1 |> filter(!col1 %in% c(NA, 0))

如果您更愿意采用两步方法将

NA
转换为
0
,然后删除 0,这里有基本选项和
dplyr
选项:

## base
df_2 = df_1
df_2[is.na(df_2$col1), "col1"] = 0
df_2 = df_2[df_2$col1 != 0, ]

## dplyr
df_2 = df_1 |>
  mutate(col1 = coalesce(col1, 0)) |>  ## coalesce replaces NA values
  filter(col1 != 0)
© www.soinside.com 2019 - 2024. All rights reserved.