根据其他行插入缺失值

Qua*_*zer 4 if-statement r

我有一个类似的数据框(只是更长)。我的目标是将 [2] 的用户名复制到 [8],将 [5] 的用户名复制到 [7]。我知道复制很奇怪,但这是有原因的。

我一直在尝试用 ifelse 来解决它:

df$Username <- ifelse(df$Name == df$Name, df$Username, NA)
Run Code Online (Sandbox Code Playgroud)

但这不起作用。我相信它相当简单,但在 stackoverlow 上找不到任何函数。预先感谢您的任何帮助。

# A tibble: 6 x 2
  Name           Username       
  <chr>          <chr>          
1 ZiadAboultaif  ziad_aboultaif 
2 ScottAitchison ScottAAitchison
3 DanAlbas       DanAlbas       
4 JohnAldag      jwaldag        
5 OmarAlghabra   OmarAlghabra   
6 ShafqatAli     Shafqat_Ali_1  
7 OmarAlghabra   NA
8 ScottAitchison NA

# Reproducilbe data:
df <- structure(list(Name = c("ZiadAboultaif", "ScottAitchison", "DanAlbas", 
"JohnAldag", "OmarAlghabra", "ShafqatAli"), Username = c("ziad_aboultaif", 
"ScottAAitchison", "DanAlbas", "jwaldag", "OmarAlghabra", "Shafqat_Ali_1"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))
Run Code Online (Sandbox Code Playgroud)

U10*_*ard 5

我会用dplyr

df %>% group_by(Name) %>% 
   mutate(Username=max(Username, na.rm=TRUE))
Run Code Online (Sandbox Code Playgroud)

输出:

  Name           Username       
  <chr>          <chr>          
1 ZiadAboultaif  ziad_aboultaif 
2 ScottAitchison ScottAAitchison
3 DanAlbas       DanAlbas       
4 JohnAldag      jwaldag        
5 OmarAlghabra   OmarAlghabra   
6 ShafqatAli     Shafqat_Ali_1  
7 OmarAlghabra   OmarAlghabra   
8 ScottAitchison ScottAAitchison
Run Code Online (Sandbox Code Playgroud)

获得最大值而不需要NAs( na.rm=TRUE) 内部mutate