我正在try 合并/加入两个收件箱dfdf2.

df是从在每个position(第4、第10、第12、.)处切割的字符载体生成的字符)变成string.初始的载体看起来像这样

vec1 <- paste(df$string, collapse = "").

df2name对应于vec1中的一些字符.例如,vec1中的第三个和第五个字符是PA,而names分别是pearapple.

df <- data.frame("position" = c(4, 10, 12, 20, 27, 30),
             "string" = c("MPPA", "APARLA", "LA", "LGLGLWLG", "ALAGGPG", "RGC"))
df2 <- data.frame("character" = c("P", "A", "L", "A", "P", "G"),
              "position" = c(3, 5, 9, 21, 26, 29),
              "name" = c("pear", "apple", "lemon", "apricot", "peach", "grape"))

我想将dfdf2合并为df3,以显示df中的stringname,如下所示.什么是做到这一点的好方法?

df3 <- data.frame("position" = c(4, 10, 12, 20, 27, 30),
              "string" = c("MPPA", "APARLA", "LA", "LGLGLWLG", "ALAGGPG", "RGC"),
              "name" = c("pear", "apple, lemon", NA, NA, "apricot, peach", "grape"))

推荐答案

在这里,我将df与其本身的一个版本连接,其中字符已分解为各自的位置并连接到df2,进行总结以将匹配内容保留在每个位置的一个组合字符串中.

library(tidyverse)
df |>
  left_join(
    df |>
      separate_longer_position(string, 1) |>
      mutate(pos = row_number()) |>
      left_join(df2, join_by(pos == position, string == character)) |>
      filter(!is.na(name)) |>
      summarize(name = paste(name, collapse = ","), .by = position))

结果

Joining with `by = join_by(position)`
  position   string          name
1        4     MPPA          pear
2       10   APARLA   apple,lemon
3       12       LA          <NA>
4       20 LGLGLWLG          <NA>
5       27  ALAGGPG apricot,peach
6       30      RGC         grape

R相关问答推荐

如何通过r中每20滚动和来创建组将数据视为1:10

确定邻国

替换收件箱的子集(行和列)

将收件箱变量传递给ggplot 2函数

分组时间连续值

如何从其他前面列中减go 特定列的平均值?

无法在我的情节中表现出显着的差异

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

terra nearest()仅为所有`to_id`列返回NA

将包含卷的底部25%的组拆分为2行

提取一个列表中单个列的重复观察结果R

在R中按行按列范围查找最大值的名称

有没有办法使用ggText,<;Sub>;&;<;sup>;将上标和下标添加到同一元素?

Ggplot2中geom_tile的动态zoom

如何将网站图像添加到带有极坐标的面包裹条形图?

具有重复元素的维恩图

QY数据的处理:如何定义QY因素的水平

自定义gggraph,使geom_abline图层仅在沿x轴的特定范围内显示

创建在文本字符串中发现两个不同关键字的实例的数据框

将文本批注减少到gglot的y轴上的单个值