我有以下数据集:

 Letter ID Number
   A    A1   1
   A    A2   2
   A    A3   3
   B    B1   1
   B    B2   2
   B    B3   3
   B    B4   4

我的目标是首先在同一"字母"组中创建所有可能的ID组合.例如,对于字母A,它只有三个组合:A1-A2、A2-A3和A1-A3.排序不同的相同ID不算作新组合,因此例如A1-A2与A2-A1相同.

然后,在这些组合中,我想将与这些ID相关联的"Numbers"列中的数字相加.因此,对于组合A1-A2,它们与"数字"列中的1和2相关联,这将导致数字1+2=3.

最后,我想将ID组合、添加的数字和原始字母放在一个新的数据框中.大概是这样的:

Letter Combination Add.Number
   A    A1-A2        3
   A    A2-A3        5
   A    A1-A3        4
   B    B1-B2        3
   B    B2-B3        5
   B    B3-B4        7
   B    B1-B3        4
   B    B2-B4        6
   B    B1-B4        5

我如何在R中做到这一点,最好是使用dplyr包?

推荐答案

library(dplyr)
  

letter <- c("A","A","A","B","B","B","B")

df <-
  data.frame(letter) %>% 
  group_by(letter) %>% 
  mutate(
    number = row_number(),
    id = paste0(letter,number)
  ) 

df %>% 
  full_join(df,by = "letter") %>% 
  filter(number.x < number.y) %>% 
  mutate(
    combination = paste0(id.x,"-",id.y),
    add_number = number.x + number.y) %>% 
  select(letter,combination,add_number)

# A tibble: 9 x 3
# Groups:   letter [2]
  letter combination add_number
  <chr>  <chr>            <int>
1 A      A1-A2                3
2 A      A1-A3                4
3 A      A2-A3                5
4 B      B1-B2                3
5 B      B1-B3                4
6 B      B1-B4                5
7 B      B2-B3                5
8 B      B2-B4                6
9 B      B3-B4                7

R相关问答推荐

如果列中存在相同的字符串,则对行值进行总和

如何根据组大小应用条件过滤?

筛选出以特定顺序患病的个体

使用ggsankey调整Sankey图中单个 node 上的标签

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

如何在PackageStatus()中列出&q;不可用的包&q;?

将标识符赋给事件序列,避免错误观察

扩展R中包含列表的数据框

远离理论值的伽马密度曲线下面积的近似

在R中,如何从一系列具有索引名的变量快速创建数据帧?

我是否可以使用多个变异项来构建顺序列(标记多个问题)

R中时间间隔的大向量与参考时间间隔的相交

在不对R中的变量分组的情况下取两行的平均值

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

如何在条形图中的x和填充变量中包含多个响应变量?

整理曲线图、曲线图和点图

在REST API中使用参数R

如何创建一个由一个连续变量和一个因素变量组成的复杂方框图?

使用nls()函数的非线性模型的半正态图

如何根据每个子框架中分类因子的唯一计数来过滤子框架列表?