我有两个 Dataframe 列表,其中一个 Dataframe 列表的结构如下:
data1
Label Pred n
1 Mito-0001_Series007_blue.tif Pear 10
2 Mito-0001_Series007_blue.tif Orange 223
3 Mito-0001_Series007_blue.tif Apple 890
4 Mito-0001_Series007_blue.tif Peach 34
并以不同的数字重复,例如
Label Pred n
1 Mito-0002_Series007_blue.tif Pear 90
2 Mito-0002_Series007_blue.tif Orange 127
3 Mito-0002_Series007_blue.tif Apple 76
4 Mito-0002_Series007_blue.tif Peach 344
第二个 Dataframe 列表的结构如下:
data2
Slice Area
Mask of Mask-0001Series007_blue-1.tif. 789.21
等等
问题
我想
1.通过以下方式使行名称匹配:
a)从数据1中删除“Mito-”
B)从数据2中删除“掩码的掩码-”
c)删除数据2末尾的“-1”
请记住,这是一个 Dataframe 列表。
目前为止:
我已经使用了来自名为“如何删除数据框中行名称的某些部分”的帖子的信息
How can I remove certain part of row names in data frame
他们建议使用
data2$Slice <- sub("Mask of Mask-", "", data2$Slice)
这显然不适用于 Dataframe 列表,它返回一个空字符
character(0)
提前感谢,我一直惊讶于人们在这个网站上回答问题是多么的棒:)
2条答案
按热度按时间8ehkhllq1#
首先,我们可以定义一个函数
f
,该函数将gsub
应用于一个适合所有情况的正则表达式。.*
任意单个字符,重复\\d{4}
四位数_?
下划线(如果可用)Series
字面上(...)
捕获组(它们在内部编号)\\.
一个句点(需要转义,否则我们说"任意字符")\\1
捕获组1似乎有用,所以我们可以应用它。
erhoui1w2#
使用给定信息
@jay.sf给出的答案非常有用。但它只适用于data 1,而不是data 2。为了确保它也适用于data 2,我额外添加了一行代码: