这里是使用库dplyr
的解决方案。我调用了您的数据框ww
,并将其重命名为列:
我是R语言的初学者,我想知道如何完成以下任务:
我想用数据集所有列的中位数替换数据集的缺失值。但是,对于每一列,我想要某个类别的中位数(取决于另一列)。我的数据集如下
structure(list(Country = structure(1:5, .Label = c("Afghanistan", "Albania", "Algeria", "Andorra", "Angola"), class = "factor"), CountryID = 1:5, Continent = c(1L, 2L, 3L, 2L, 3L), Adolescent.fertility.rate.... = c(151L, 27L, 6L, NA, 146L), Adult.literacy.rate.... = c(28, 98.7, 69.9, NA, 67.4)), class = "data.frame", row.names = c(NA, -5L))
因此,对于每一列,我想用特定大洲。]中的值的中位数替换缺少的值。
我是R的初学者,我想知道如何执行以下任务:我想用数据集中所有列的中位数替换数据集中的缺失值。但是,对于每一列,...
这里是使用库dplyr
的解决方案。我调用了您的数据框ww
,并将其重命名为列:
library('dplyr')
ww %>%
rename(
lit_rate = Adult.literacy.rate....
) %>%
group_by(
Continent
) %>%
mutate(
lit_rate = replace(
lit_rate,
is.na(lit_rate),
median(lit_rate, na.rm = TRUE)
)
) %>%
ungroup()
我们可以使用dplyr::mutate_at
将其每一列中的NA
(Continent
除外)替换为其Continent
组的中位数
library(dplyr)
df %>%
group_by(Continent) %>%
mutate_at(vars(-group_cols(), -Country), ~ifelse(is.na(.), median(., na.rm = TRUE), .)) %>%
ungroup()
返回:
# A tibble: 5 x 5 Country CountryID Continent Adolescent.fertility.rate.... Adult.literacy.rate.... <fct> <int> <int> <int> <dbl> 1 Afghanistan 1 1 151 28 2 Albania 2 2 27 98.7 3 Algeria 3 3 6 69.9 4 Andorra 4 2 27 98.7 5 Angola 5 3 146 67.4
说明:首先,我们将data.frame
:如果df
分组为Continent
。然后,按以下方式更改分组列([和Country
不是数字)的所有列exceptis.na
为TRUE,则将其替换为中位数,并且由于已分组,因此将是Continent
组的中位数。最后,我们称呼ungroup
为佳,以恢复“正常” tibble。
这里是使用库dplyr
的解决方案。我调用了您的数据框ww
,并将其重命名为列:
我们可以使用dplyr::mutate_at
将其每一列中的NA
(Continent
除外)替换为其Continent
组的中位数
library(dplyr)
df %>%
group_by(Continent) %>%
mutate_at(vars(-group_cols(), -Country), ~ifelse(is.na(.), median(., na.rm = TRUE), .)) %>%
ungroup()