按组返回列中最常见的值,用该值替换该列中的空值。

12 浏览
0 Comments

按组返回列中最常见的值,用该值替换该列中的空值。

我想用每组中最常见的值来替换我的数据框列中的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'错误。

0
0 Comments

问题:如何按组返回列中最常见的值,并用该值替换该列中的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_City   
              
1 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值,从而填补缺失值,保持数据集的完整性。

0