我有两个DFS,它们在不同的时间点对同一组进行了采样,但在不同的时间点上有一些损耗和一些变量的添加/省略.(底部生成样本数据的代码)

我想根据df1中的ID(一个CHR变量)是否也出现在df2中来计算波之间的消耗率,并在df1中创建一个二进制列,指示ID是否出现在df2中.

Df1和df2的格式如下

id                         var_1  var_2 ...
    
5ea1954758634f04542a50bf    5      1
3fjkfgho55efy467grtu523r    7      4
df79756gh5485trhfsdkig3d    3      8

我想要的输出是:


df1

id                         in _df2  var_1  var_2 ...
    
5ea1954758634f04542a50bf   Yes       5      1
3fjkfgho55efy467grtu523r   Yes       4      2
df79756gh5485trhfsdkig3d   No        8      3

我try 使用此代码,但似乎不起作用(df1中没有生成任何列):

df1 %>%
  mutate(in_df2 = c("no", "yes")[1 + (rowSums(
    outer(
      strsplit(id, "\\s+"),
      strsplit(df2$id, "\\s+"),
      Vectorize(function(x, y) all(x %in% y) | all(y %in% x))
    )
  ) > 0)])

生成示例DFS的代码:

#df1
df1 <- structure(list(id = c("5ea1954758634f04542a50bf", "3fjkfgho55efy467grtu523r", "df79756gh5485trhfsdkig3d", 
"d6rg756ghuej4678dfdkig3d", "546dt547546hgdvc842a50bf"), var1 = 1:5, var2 = 3:7), row.names = c(
-6L), class = "data.frame")

#df2
df2 <- structure(list(id = c("73egdv4758634f04542a50bf", "3fjkfgho55efy467grtu523r", "tr54756gh5485trhfsdkig3d", 
"d6rg756ghuej4678dfdkig3d", "357dt547546hgdvc842a50bf"), var1 = 2:7, var4 = 3:7), row.names = c(
-6L), class = "data.frame")

推荐答案

如果你所需要做的就是勾选id列,你可以简单地做:

library(dplyr)
df1 |>
  mutate(in_df2 = ifelse(id %in% df2$id, "Yes", "No"))
#                         id var1 var2 in_df2
# 1 5ea1954758634f04542a50bf    1    3     No
# 2 3fjkfgho55efy467grtu523r    2    4    Yes
# 3 df79756gh5485trhfsdkig3d    3    5     No
# 4 d6rg756ghuej4678dfdkig3d    4    6    Yes
# 5 546dt547546hgdvc842a50bf    5    7     No

下面是使用semi_join的另一个选项,这是一种筛选器联接,您可以使用它来子集公共行.这将允许更多的合并项,而不仅仅是id个:

library(dplyr)
library(tidyr)

semi_join(df1, df2, by = "id") |>
  mutate(in_df2 = "Yes") |>
  left_join(df1, y = _) |>
  mutate(in_df2 = replace_na(in_df2, "No"))

R相关问答推荐

过滤矩阵以获得R中的唯一组合

从多个前置日期中获取最长日期

保存包含循环和ifelse的函数的输出

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

在for循环中转换rabrame

将文件保存到新文件夹时,切换r设置以不必创建目录

如何通过ggplot2添加短轴和删除长轴?

根据现有列的名称和字符串的存在进行变异以创建多个新列

计算两列中满足特定条件连续行之间的平均值

基于Key->Value数据帧的基因子集相关性提取

如何将这个小列表转换为数据帧?

R基于变量组合创建新的指标列

自定义交互作用图的标签

构建一个6/49彩票模拟系统

如何在内联代码中添加额外的空格(R Markdown)

如何在R中使用因子行求和?

在使用ggplot2的情况下,如何在使用coord_trans函数的同时,根据未转换的坐标比来定位geom_瓷砖?

在一个multiplot中以非对称的方式在R中绘制多个图

为什么在POSIXct-times的向量上循环会改变R中的类型?