如果其他列中的行相同,请填写缺失值

问题描述 投票:0回答:1

我有一张看起来如下的桌子:

姓名 地区 身份证
姓名1 美国 123
姓名1 美国
姓名2 美国 122
姓名3 美国 124
姓名1 英国
姓名1 英国 135
姓名2 英国 140
姓名3 美国

如您所见,ID 列中有空值,如果列名称和区域对应,我希望用其他行的值填充这些值。所以它应该看起来像这样:

姓名 地区 身份证
姓名1 美国 123
姓名1 美国 123
姓名2 美国 122
姓名3 美国 124
姓名1 英国 135
姓名1 英国 135
姓名2 英国 140
姓名3 美国

某些列仍为空,但大多数都没有问题。 R中有没有办法做到这一点? 也许在 Excel 中会更容易(Vlookup 也许我不确定)。如果您有任何想法,请分享)

r excel missing-data
1个回答
0
投票

行的顺序在这里很重要,例如 - 第 4 行中的 Name3 US 和第 8 行不相关。我们可以使用

consecutive_id
创建一个新组,然后使用
fill
值。

library(dplyr)
library(tidyr)

df %>%
  mutate(group_id = consecutive_id(Name, Region)) %>%
  group_by(group_id) %>%
  fill(Id, .direction = "downup") %>%
  ungroup

# A tibble: 8 × 4
#  Name  Region    Id group_id
#  <chr> <chr>  <int>    <int>
#1 Name1 US       123        1
#2 Name1 US       123        1
#3 Name2 US       122        2
#4 Name3 US       124        3
#5 Name1 UK       135        4
#6 Name1 UK       135        4
#7 Name2 UK       140        5
#8 Name3 US        NA        6

数据

如果您以 可重现的格式提供数据

,帮助会更容易
df <- structure(list(Name = c("Name1", "Name1", "Name2", "Name3", "Name1", 
"Name1", "Name2", "Name3"), Region = c("US", "US", "US", "US", 
"UK", "UK", "UK", "US"), Id = c(123L, NA, 122L, 124L, NA, 135L, 
140L, NA)), row.names = c(NA, -8L), class = "data.frame")
© www.soinside.com 2019 - 2024. All rights reserved.