r - R:如何在某些列匹配的同一数据框中替换列中的 NA?
问题描述
我有一个数据框“玩家”(摘录如下)。每当“匹配”列为 NA 时,我想用来自具有相同“Start.Date”和“Ground”的单独行中的匹配号替换该 NA。例如,下面的第 96588 行具有“匹配”NA,但它具有与第 2 行相同的“Start.Date”和“Ground”。第 2 行与“1”匹配。因此,作为我的查询的结果,我也想将第 96588 行中的“匹配”填充为“1”。
Player Start.Date Inns_Bat Ground match
2: NFD Thomson (AUS) 2018-08-09 1 Lord's 1
3: NFD Thomson (AUS) 2014-12-12 3 Lord's 23
4: NFD Thomson (AUS) 2018-08-09 1 Eden G 97
96588: SM Curran (ENG) 2018-08-09 4 Lord's NA
预期输出:
Player Start.Date Inns_Bat Ground match
2: NFD Thomson (AUS) 2018-08-09 1 Lord's 1
3: NFD Thomson (AUS) 2014-12-12 3 Lord's 23
4: NFD Thomson (AUS) 2018-08-09 1 Eden G 97
96588: SM Curran (ENG) 2018-08-09 4 Lord's 1
因此,第 96588 行中的“NA”被第 2 行中的“1”替换,因为“Start.Date”和“Ground”在两行中都匹配。它不会从第 3 行或第 4 行替换,因为“Start.Date”或“Ground”与第 96588 行不匹配。
解决方案
这是一个tidyverse
选项
library(tidvyerse)
df.new <- df %>%
rowid_to_column("row") %>%
group_by(Start.Date, Ground) %>%
fill(match) %>%
ungroup() %>%
arrange(row) %>%
select(-row)
## A tibble: 4 x 5
# Player Start.Date Inns_Bat Ground match
# <fct> <fct> <int> <fct> <int>
#1 NFD Thomson (AUS) 2018-08-09 1 Lord's 1
#2 NFD Thomson (AUS) 2014-12-12 3 Lord's 23
#3 NFD Thomson (AUS) 2018-08-09 1 Eden G 97
#4 SM Curran (ENG) 2018-08-09 4 Lord's 1
df.new[df.new$match == 1, ]
## A tibble: 2 x 5
# Player Start.Date Inns_Bat Ground match
# <fct> <fct> <int> <fct> <int>
#1 NFD Thomson (AUS) 2018-08-09 1 Lord's 1
#2 SM Curran (ENG) 2018-08-09 4 Lord's 1
样本数据
df <- read.table(text =
"Player Start.Date Inns_Bat Ground match
'NFD Thomson (AUS)' 2018-08-09 1 'Lord\\'s' 1
'NFD Thomson (AUS)' 2014-12-12 3 'Lord\\'s' 23
'NFD Thomson (AUS)' 2018-08-09 1 'Eden G' 97
'SM Curran (ENG)' 2018-08-09 4 'Lord\\'s' NA", header = T)
推荐阅读
- php - 使用 PHP 将 JSON 转换为 MYSQL TABLE
- reactjs - 如何从表单太数组添加输入
- python - 将 xlsxwriter set_row 绑定到最后一列
- hidden-markov-models - 隐马尔可夫 R 包 - 维特比函数 - 错误预测的状态
- config - 如何在目录中包含所有 alsa 配置文件?
- sql - 如何查询数据库中所有域的定义?
- powershell - 执行脚本时如何要求提供参数
- assembly - 对访问字符串中的字符的反汇编中的取消引用操作感到困惑
- javascript - 声明 Cheerio 变量的问题
- java - Eclipse 中的 JavaFX 和 luaj - java.lang.module.InvalidModuleDescriptorException: luajc.class found in top level directory