【问题标题】:How to split a dataframe after matching with another dataframe与另一个数据框匹配后如何拆分数据框
【发布时间】:2021-05-11 21:38:28
【问题描述】:

我有 2 个数据框。说df_1df_2。首先,我匹配这两个数据帧之间的行。在创建了一些匹配之后,我想将df_1 分成两个新的数据框。一个将包含所有信息 + 50% 匹配信息,第二个将包含其余 50% 匹配信息。例如,

df_1

  query target new_ssp
1  ID_1   ID_2    0.50
2  ID_3   ID_2    0.90
3  ID_3   ID_4    0.80
4 ID_40  ID_50    0.70
5 ID_15  ID_31    0.50
6  ID_1   ID_6    0.09

df_2

  query target  ssp
1  ID_1   ID_2 0.50
2  ID_2   ID_3 0.90
3  ID_3   ID_4 0.80
4  ID_4   ID_5 0.70
5  ID_5   ID_3 0.50
6  ID_6   ID_1 0.09

他们之间的匹配(common)使用common <- inner_join(df_1, df_2)

  query target new_ssp ssp
1  ID_1   ID_2     0.5 0.5
2  ID_3   ID_4     0.8 0.8

我想制作另一个 df_3(删除了 50% 与 df_1common 匹配的数据)。删除了df_1 的第 3 行。

  query target new_ssp
1  ID_1   ID_2    0.50
2  ID_3   ID_2    0.90
3 ID_40  ID_50    0.70
4 ID_15  ID_31    0.50
5  ID_1   ID_6    0.09

df_4(根据df_1common 删除后匹配的其余部分)。删除了common 的第 2 行。

  query target new_ssp ssp
1  ID_1   ID_2     0.5 0.5

如何制作这两个新数据框?

可重复的数据

query <- c("ID_1", "ID_3", "ID_3", "ID_40", "ID_15", "ID_1")
target <- c("ID_2", "ID_2", "ID_4", "ID_50", "ID_31", "ID_6")
new_ssp <- c(0.5, 0.9, 0.8, 0.7, 0.5, 0.09)
df_1 <- data.frame(query, target, new_ssp, stringsAsFactors = FALSE)

query <- c("ID_1", "ID_2", "ID_3", "ID_4", "ID_5", "ID_6")
target <- c("ID_2", "ID_3", "ID_4", "ID_5", "ID_3", "ID_1")
ssp <- c(0.5, 0.9, 0.8, 0.7, 0.5, 0.09)
df_2 <- data.frame(query, target, ssp, stringsAsFactors = FALSE)

【问题讨论】:

  • 你想单独创建df_4
  • 没有df_3df_4

标签: r dplyr


【解决方案1】:

你可以这样做:

df_4 <- slice_head(common,  prop = 0.5)

df_3 <- anti_join(df_1,  anti_join(common, df_4))

【讨论】:

  • 非常感谢
【解决方案2】:

基本 R 选项

common <- cbind(merge(df_1, df_2), grp = 1:2)
dflst <- list(df_1, df_2)
lapply(
  seq_along(dflst),
  function(k) {
    subset(
      merge(dflst[[k]], common, all.x = TRUE),
      is.na(grp) | grp != k
    )[names(dflst[[k]])]
  }
)

给予

[[1]]
  query target new_ssp
2  ID_1   ID_6    0.09
3 ID_15  ID_31    0.50
4  ID_3   ID_2    0.90
5  ID_3   ID_4    0.80
6 ID_40  ID_50    0.70

[[2]]
  query target  ssp
1  ID_1   ID_2 0.50
2  ID_2   ID_3 0.90
4  ID_4   ID_5 0.70
5  ID_5   ID_3 0.50
6  ID_6   ID_1 0.09

【讨论】:

  • 非常感谢
猜你喜欢
  • 2021-04-27
  • 1970-01-01
  • 2020-04-19
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多