Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过部分匹配行名称进行R子集设置_R_Regex_Subset - Fatal编程技术网

通过部分匹配行名称进行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