我如何获得条件中R中多列的中位数(根据另一列)

艾拉

我是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))

因此,对于每个列,我想用特定大陆中值的中位数替换缺失值

达里奥

我们可以用每组(中位数和非数字列)中的sdplyr::mutate_at替换为其的中位数NAContinentCountryContinent

df <- 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))

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.framedf通过Continent然后,按以下方式对分组列(Country而非数字列)以外所有列进行变异:如果is.na为TRUE,则将其替换为中位数,并且由于已分组,因此它将成为该Continent的中位数(如果不是)NA我们将其替换为自身)。最后,我们呼吁ungroup采取良好的措施来恢复“正常”小事

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据另一列的值创建列中中位数差异的数据框

从另一列的值中查找一列值的范围的中位数

如何根据条件在熊猫中创建另一列?

根据R中另一列的最小值获得一列的对应值

根据R中另一列的条件从一列中删除重复项

如何根据另一列中的 TRUE/FALSE 获得一列的总和

如何根据Pandas中另一列的条件比较同一列中的日期?

如何根据R中的条件将数据从一列复制到另一列?

如何根据R中另一列的条件求和一列的特定单元格?

如何根据另一列中的条件转置一列?

如何根据另一列的条件/分组删除一列中的连续重复行?

如何根据条件将一列中的值设置为另一列

根据条件用另一列的值替换多列中的值

R 中的变异列:根据另一列条件从列中减去值

R | 根据另一列中的条件更改列中的元素

如何根据R中另一列的权重重新缩放一列?

如何根据另一列中的值进行条件替换列中的值?

如何根据数据框另一列中的条件在列中查找最小值?

如何根据另一列中的条件汇总列中的值?

如何根据另一列中满足的条件在熊猫数据框中添加新列?

根据另一列 R 中的条件创建一个新列

如何计算Google BigQuery中多列的中位数?

如何计算pysparK中多列的中位数?

根据 R 中另一列的条件,用相同的值填充整个新列

熊猫,根据条件在另一列中搜索结果

根据另一列中的条件填充熊猫

根据另一列中满足的条件进行过滤

如何根据另一列中的条件更改数据框的某一列中的值?

如何根据熊猫另一列中的条件生成具有值的新列