r - 根据条件将值从一行复制到另一行

标签 r dataframe dplyr data.table tidyr

我有这个数据集:

# Data
movmnt_id <- c("101", "601", "105", "321")
plant <- c("FF", "FF", "DO", "BO")
loc <- c("MM", "MM", "KB", "RD")
vendor <- c(123, NA,NA,NA)
customer <- c(456, NA,NA,NA)
check <- c(NA, NA, "defined", "defined")

df <-  data.frame(movmnt_id, plant, loc, vendor,customer,check)

  movmnt_id plant loc vendor customer   check
1       101    FF  MM    123      456    <NA>
2       601    FF  MM     NA       NA    <NA>
3       105    DO  KB     NA       NA defined
4       321    BO  RD     NA       NA defined

我需要得到这个输出(第二行 vendor & customer 是从第一行复制的):

  movmnt_id plant loc vendor customer   check
1       101    FF  MM    123      456    <NA>
2       601    FF  MM    123      456    <NA>
3       105    DO  KB     NA       NA defined
4       321    BO  RD     NA       NA defined

条件如下:

If in current row `movmnt_id `== 601 
 -> take row *WHERE* `plant` & `loc` are the same as in the current row
              *AND* `movmnt_id  == 101`
              *AND* is.na(check)
 -> copy from found row `vendor` & `customer` to the current row

我可以考虑一些 for 循环,但对于我的数据集来说它太重了。
我想知道是否有更优雅且计算成本更低的解决方案。

我试图从这些案例中调整解决方案,但没有成功:

最佳答案

要实现您的条件,您可以尝试以下操作 -

library(dplyr)

df %>%
  group_by(plant, loc) %>%
  mutate(across(c(vendor, customer), 
              ~ifelse(movmnt_id == '601' & is.na(.), 
                      .[is.na(check) & movmnt_id == 101], .))) %>%
  ungroup

#  movmnt_id plant loc   vendor customer check  
#  <chr>     <chr> <chr>  <dbl>    <dbl> <chr>  
#1 101       FF    MM       123      456 NA     
#2 601       FF    MM       123      456 NA     
#3 105       DO    KB        NA       NA defined
#4 321       BO    RD        NA       NA defined

关于r - 根据条件将值从一行复制到另一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67399813/

相关文章:

r - 如何让purrr map 函数运行得更快?

r - 根据 78*2 其他变量 dplyr 的列输入计算新的 (78) 个变量

r - 从维基百科的一个部分中抓取表格

r - row.names() 和 attributes$row.names 有什么区别?

python - Pandas groupby中的条件分配

r - dplyr 的 left_join 行为不正确?

R删除pheatmap的边界

r - 如何使用ggplot2标记LOESS曲线中的斜率变化?

java - 数据库 DataFrame Null 值未传入 Json 文件

python - pandas DataFrame reset_index 可以处理重复的列名?