通过部分匹配行名称进行R子集设置
我有一个以制表符分隔的文件:通过部分匹配行名称进行R子集设置,r,regex,subset,R,Regex,Subset,我有一个以制表符分隔的文件: row.names c1 c2 c3 AF3 0 2 4 BN4 9 1 2 AF2 8 7 1 BN8 4 6 8 我只想选择行名称以BN4开头的行,输出如下: row.names c1 c2 c3 BN4 9 1 2 BN8 4 6 8 我知道如果我知道向量中的确切行名,我将如何解决这个问题 df[row.names(df) %in% c('BN4','BN8'), ] 但是如何通过查找以“BN”开头的行并对其进行子集设置来解决问题呢?您可以使用gre
row.names c1 c2 c3
AF3 0 2 4
BN4 9 1 2
AF2 8 7 1
BN8 4 6 8
我只想选择行名称以BN4开头的行,输出如下:
row.names c1 c2 c3
BN4 9 1 2
BN8 4 6 8
我知道如果我知道向量中的确切行名,我将如何解决这个问题
df[row.names(df) %in% c('BN4','BN8'), ]
但是如何通过查找以“BN”开头的行并对其进行子集设置来解决问题呢?您可以使用grep查找名称以BN开头的行
使用x代替df是R中的一个函数:
x[grep("^BN", row.names(x)),]
## c1 c2 c3
## BN4 9 1 2
## BN8 4 6 8
您可以使用grep查找名称以BN开头的行
使用x代替df是R中的一个函数:
x[grep("^BN", row.names(x)),]
## c1 c2 c3
## BN4 9 1 2
## BN8 4 6 8
尝试在grepl中使用正则表达式 如果您更喜欢更具描述性的函数,可以对stringr包执行相同的操作
问题是,这些调用将在字符串中的任何位置拾取三个字符匹配为BN[digit]的任何行。像XYBN9L这样的东西会被抓到 尝试在grepl中使用正则表达式 如果您更喜欢更具描述性的函数,可以对stringr包执行相同的操作 问题是,这些调用将在字符串中的任何位置拾取三个字符匹配为BN[digit]的任何行。像XYBN9L这样的东西会被抓到 您可以使用dplyr中的slice 其中:
# c1 c2 c3
#1 9 1 2
#2 4 6 8
在这里,行名称会自动删除。要保留它们,可以使用add_rownames将其转换为显式变量:
或使用过滤器:
你会得到:
# rowname c1 c2 c3
#1 BN4 9 1 2
#2 BN8 4 6 8
您可以使用dplyr中的slice
其中:
# c1 c2 c3
#1 9 1 2
#2 4 6 8
在这里,行名称会自动删除。要保留它们,可以使用add_rownames将其转换为显式变量:
或使用过滤器:
你会得到:
# rowname c1 c2 c3
#1 BN4 9 1 2
#2 BN8 4 6 8
我假设以BN4开头的名称是一个拼写错误。我假设以BN4开头的名称是一个拼写错误。如何解决这个问题?如果您确实需要它只是前两个字符,您可以尝试substrow.namedf,1,2==BN。substr将仅从行名称中提取前两个字母。我确信有一个正则表达式只会看前两个字母,但我很难用基本之外的正则表达式。如何解决这个问题?如果你真的需要它只是前两个字符,你可以尝试substrow.namedf,1,2==BN。substr将仅从行名称中提取前两个字母。我确信有一个正则表达式只会看到前两个字母,但除了基本的正则表达式之外,我还要努力使用正则表达式。
df %>% add_rownames() %>% filter(grepl("^BN", rowname))
# rowname c1 c2 c3
#1 BN4 9 1 2
#2 BN8 4 6 8