首页 > 解决方案 > 如何按R中列的条件填充NA行

问题描述

这是一个例子:

df<-data.frame(v1=rep(1:2, 4), 
               v2=rep(c("a", "b"), each=4), 
               v3=paste0(rep(1:2, each=4), rep(c("m", "n", "o", "p"), each=2)), 
               v4=c(1,2, NA, NA, 3,4, NA,NA),
               v5=c(5,6, NA, NA, 7,8, NA,NA),
               v6=c(9,10, NA, NA, 11,12, NA,NA))

df
  v1 v2 v3 v4 v5 v6
1  1  a 1m  1  5  9
2  2  a 1m  2  6 10
3  1  a 1n NA NA NA
4  2  a 1n NA NA NA
5  1  b 2o  3  7 11
6  2  b 2o  4  8 12
7  1  b 2p NA NA NA
8  2  b 2p NA NA NA

我想要的是,如果通过忽略 的最后一个字母,列v1++相同,v2则从不是的行中填充。在这种情况下,由于相同的 1a1,row3 的 NA 应该由 row1 填充,忽略 m。所以期望的输出是:v3v3NAsNA

  v1 v2 v3 v4 v5 v6
1  1  a 1m  1  5  9
2  2  a 1m  2  6 10
3  1  a 1n  1  5  9
4  2  a 1n  2  6 10
5  1  b 2o  3  7 11
6  2  b 2o  4  8 12
7  1  b 2p  3  7 11
8  2  b 2p  4  8 12

标签: r

解决方案


我不知道,但我认为这是产生结果的更简单方法

library(tidyverse)
df %>% 
  group_by(v1,v2) %>% 
  fill(v4:v6)

添加 v3 逻辑

df %>%
  mutate(v7 = v3 %>% as.character() %>%  parse_number()) %>% 
  group_by(v1,v2,v7) %>% 
  fill(v4:v6) %>% 
  select(-v7)

推荐阅读