根据对象名称在列表内创建新列表

时间:2019-05-29 15:02:52

标签: r list

我有一个对象列表,与以下列表类似。为简单起见,该列表仅由所述对象的名称组成。

List1
    A1_B1.C1
    A1_B2.C2 
    A1_B3.C3
    A2_B1.C1
    A2_B2.C2 
    A2_B3.C3
    A3_B1.C1
    A3_B2.C2 
    A3_B3.C3

我想将所有类似的B数据连接到新列表中。

List2
  B1
    A1_B1.C1   
    A2_B1.C1
    A3_B1.C1
  B2
    A1_B2.C1   
    A2_B2.C2
    A3_B2.C3
  B3
    A1_B3.C1   
    A2_B3.C2
    A3_B3.C3

我一直在尝试一些正则表达式代码,以尝试在.之前和之后分割对象的名称,但效果不佳。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

一个选项将是split,使用提取的'B'子字符串

split(v1, gsub("A\\d+_|\\.C\\d+", "", v1))
#$B1
#[1] "A1_B1.C1" "A2_B1.C1" "A3_B1.C1"

#$B2
#[1] "A1_B2.C2" "A2_B2.C2" "A3_B2.C2"

#$B3
#[1] "A1_B3.C3" "A2_B3.C3" "A3_B3.C3"

注意:尚不清楚这些是否是对象标识符

OP使用不同的字符串模式

split(v2, gsub("^[^_]+\\_|\\..*$", "", v2))

数据

v1 <- c("A1_B1.C1", "A1_B2.C2", "A1_B3.C3", "A2_B1.C1", "A2_B2.C2", 
 "A2_B3.C3", "A3_B1.C1", "A3_B2.C2", "A3_B3.C3")

v2 <- "GenetypeA_Drug1.ValueA"