首页 > 解决方案 > 根据 R 中的指定条件更新数据帧

问题描述

library(data.table)
a <- data.table(p = seq(1, 5, 0.5), s = 1:9)
b <- data.table(p = c(2.0, 6, 3.5), s = c(4, 7, 0))

我有 2 个数据框,数据框“a”是基础,数据框“b”包含更新。我需要使用以下条件对数据框“a”进行更改:

  1. 如果在“s”列中的数据帧“b”中有值 0,则有必要从数据帧“a”中删除具有相应值“p”的所有行
  2. 如果在数据框“in”中,列“s”中的值与数据框“a”中的相应值“s”不同,则必须将其替换为数据框“b”中的值
  3. 如果数据框“b”具有唯一值“p”,则需要将此行添加到数据框“a”

结果:

     p s
1: 1.0 1
2: 1.5 2
3: 2.0 4
4: 2.5 4
5: 3.0 5
6: 4.0 7
7: 4.5 8
8: 5.0 9
9: 6.0 7

标签: rdataframe

解决方案


使用dplyr(问题未指定是否data.table需要语法)。

  1. 获取p需要删除的值。
  2. 过滤出在 1. 中找到的值,并用于distinct()确保所有行都是唯一的。
library(dplyr)

to_delete <- 
  filter(b, s == 0) %>% 
  pull(p)

bind_rows(a, b) %>% 
  filter(!p %in% to_delete) %>% 
  distinct(p, .keep_all = TRUE)
#>      p s
#> 1: 1.0 1
#> 2: 1.5 2
#> 3: 2.0 3
#> 4: 2.5 4
#> 5: 3.0 5
#> 6: 4.0 7
#> 7: 4.5 8
#> 8: 5.0 9
#> 9: 6.0 7

推荐阅读