首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据其他两个变量的值,用最常见的值替换丢失的值

根据其他两个变量的值,用最常见的值替换丢失的值
EN

Stack Overflow用户
提问于 2018-10-05 13:50:24
回答 2查看 1K关注 0票数 2

我正在使用R,并拥有一个由三个变量组成的数据集:例如ABC。变量C有一些NA观测值,我希望用C的最频繁值替换为相同的AB量。例如,在以下数据集中:

代码语言:javascript
复制
   A B  C
1  1 2  0
2  2 1  1
3  1 1  1
4  3 1  1
5  1 2  0
6  1 2  0
7  2 3  0
8  1 2  1
9  3 3  0
10 1 2 NA

在这里,我想用NA代替0,因为它是A=1B=2C最常见的值。

我知道,如果我写一个函数来获得频率和相应的值,这是可以做到的,但是,我想知道是否有不那么复杂的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-05 14:05:43

tidyverse选项

代码语言:javascript
复制
library(tidyverse)
df %>%
    group_by(A, B) %>%
    add_count(C) %>%
    mutate(C = if_else(is.na(C), C[which.max(n)], C)) %>%
    select(-n) %>%
    ungroup()
# A tibble: 10 x 3
       A     B     C
   <int> <int> <int>
 1     1     2     0
 2     2     1     1
 3     1     1     1
 4     3     1     1
 5     1     2     0
 6     1     2     0
 7     2     3     0
 8     1     2     1
 9     3     3     0
10     1     2     0

说明:由AB对条目进行分组,为每个C添加一个计数,将C中的NA值替换为C中最常见的非NA值,并整理tibble以再现预期的输出。

样本数据

代码语言:javascript
复制
df <- read.table(text =
    "   A B  C
1  1 2  0
2  2 1  1
3  1 1  1
4  3 1  1
5  1 2  0
6  1 2  0
7  2 3  0
8  1 2  1
9  3 3  0
10 1 2 NA
", header = T)
票数 1
EN

Stack Overflow用户

发布于 2018-10-05 17:29:38

基R

(很抱歉排了很长的队)

代码语言:javascript
复制
unsplit(lapply(split(df, list(df$A, df$B), drop=TRUE), function(.) {.$C[is.na(.$C)] <- names(which.max(table(.$C)));.}), interaction(df$A, df$B, drop = TRUE))

# output
   A B C
1  1 2 0
2  2 1 1
3  1 1 1
4  3 1 1
5  1 2 0
6  1 2 0
7  2 3 0
8  1 2 1
9  3 3 0
10 1 2 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52667144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档