r - 根据其他行插入缺失值
问题描述
我有一个类似的数据框(只是更长)。我的目标是将 [2] 的用户名复制到 [8] 和 [5] 到 [7]。我知道制作副本很奇怪,但这是有原因的。
我一直在尝试用 ifelse 解决它:
df$Username <- ifelse(df$Name == df$Name, df$Username, NA)
但它不起作用。我相信这很简单,但在 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"
))
解决方案
我会使用dplyr
:
df %>% group_by(Name) %>%
mutate(Username=max(Username, na.rm=TRUE))
输出:
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
NA
在没有s( na.rm=TRUE
)的情况下获得最大值mutate
。
推荐阅读
- vb.net - 我可以在anyCPU中运行86x位dll没有问题.net vs 2008
- reactjs - React Fusion-Charts 条形宽度
- swift - 如何在 SwiftUI 中使用 AudioKit?在视图中更改状态变量
- r - 根据另一列的值扩展面板数据集,然后填充其间的所有内容
- javascript - 根据当前缩放传单更改 ClusterRadius
- arrays - 通过 id 数组动态查找一些
- spring - 在单元测试中启动和关闭 Spring 应用程序上下文
- c# - 在一定时间后使源代码过期
- python - 现场键盘输出变化
- javascript - 比较两个数组并从数组中删除重复元素