按组返回列中最常见的值,用该值替换该列中的空值。
按组返回列中最常见的值,用该值替换该列中的空值。
我想用每组中最常见的值来替换我的数据框列中的na值。
#示例: df <- data.frame(Home_Abbr = c('PHI', 'PHI', 'DAL', 'PHI'), Home_City = c('Philadelphia', 'Philadelphia', 'Dallas', NULL)) #期望结果 Home_Abbr Home_City PHI Philadelphia PHI Philadelphia DAL Dallas PHI Philadelphia
以下是我到目前为止尝试的方法:
df <- df %>% group_by(Home_Abbr) %>% mutate(Home_City = names(which.max(table(Home_City))))
但是当我运行时,出现了一个'Can't combine NULL and non NULL results'错误。
问题:如何按组返回列中最常见的值,并用该值替换该列中的null值?
原因:在处理数据集时,有时候会遇到需要按组返回某一列中最常见值的情况,并且需要用该值替换该列中的null值。这样做可以填补缺失值,并保持数据集的完整性。
解决方法:可以使用以下方法来解决该问题。
1. 首先,定义一个函数Mode,用于计算向量的众数。
Mode <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] }
2. 接下来,使用dplyr库中的mutate函数和replace函数,按组对数据集进行操作。首先,使用group_by函数按Home_Abbr列分组,然后使用mutate函数将null值替换为该组中Home_City列的众数。
library(dplyr) df %>% group_by(Home_Abbr) %>% mutate(Home_City = replace(Home_City, is.na(Home_City), Mode(Home_City))) %>% ungroup
3. 执行上述操作后,将得到一个新的数据集,其中null值已被替换为各组中Home_City列的众数值。
# A tibble: 4 × 2 Home_Abbr Home_City1 PHI Philadelphia 2 PHI Philadelphia 3 DAL Dallas 4 PHI Philadelphia
数据集示例:
df <- structure(list(Home_Abbr = c("PHI", "PHI", "DAL", "PHI"), Home_City = c("Philadelphia", "Philadelphia", "Dallas", NA)), class = "data.frame", row.names = c(NA, -4L))
通过以上方法,我们可以按组返回列中最常见的值,并用该值替换该列中的null值,从而填补缺失值,保持数据集的完整性。