R 如何在字符处拆分字符串并在左侧或右侧子集?
假设我有一个要在某个字符处拆分的字符文件,然后选择拆分左侧的新字段。有没有办法做到这一步?例如:R 如何在字符处拆分字符串并在左侧或右侧子集?,r,R,假设我有一个要在某个字符处拆分的字符文件,然后选择拆分左侧的新字段。有没有办法做到这一步?例如: x <- strsplit('dark_room',"_") x[[1]][2] [1] "room" 访问文件室需要两步操作-如何在一个操作中对文件室进行子集设置?更简单的方法是使用stringr中的word并指定sep和其他参数 library(stringr) word('dark_room', -1, sep="_") #[1] "room" 或者使用str_extract来匹配字
x <- strsplit('dark_room',"_")
x[[1]][2]
[1] "room"
访问文件室需要两步操作-如何在一个操作中对文件室进行子集设置?更简单的方法是使用stringr中的word并指定sep和其他参数
library(stringr)
word('dark_room', -1, sep="_")
#[1] "room"
或者使用str_extract来匹配字符串结尾$处除[^]+以外的字符
str_extract('dark_room', "[^_]+$")
#[1] "room"
或者使用stri_extract from stringi,我们可以指定第一个和最后一个
strsplit总是返回一个列表。因此,作为一个一般情况,当有多个元素时,可以使用sapply循环列表,使用任意一个尾部循环子集
或者前往获取前n个元素
或使用扫描
更简单的选择是使用stringr中的word并指定sep和其他参数
library(stringr)
word('dark_room', -1, sep="_")
#[1] "room"
或者使用str_extract来匹配字符串结尾$处除[^]+以外的字符
str_extract('dark_room', "[^_]+$")
#[1] "room"
或者使用stri_extract from stringi,我们可以指定第一个和最后一个
strsplit总是返回一个列表。因此,作为一个一般情况,当有多个元素时,可以使用sapply循环列表,使用任意一个尾部循环子集
或者前往获取前n个元素
或使用扫描
这里有一种使用sub-from-base R的方法,它只删除第一个下划线之前的所有内容-
# for left side of '_'
sub(".*_", "", x)
[1] "room"
# for right side of '_'
sub("(.*)_.*", "\\1", x)
[1] "dark"
这里有一种使用sub-from-base R的方法,它只删除第一个下划线之前的所有内容-
# for left side of '_'
sub(".*_", "", x)
[1] "room"
# for right side of '_'
sub("(.*)_.*", "\\1", x)
[1] "dark"
使用问题中的解决方案或答案中的任何其他解决方案定义自己的函数
left = function(x, sep){
substring(x, 1, regexpr(sep, x) - 1)
}
right = function(x, sep){
substring(x, regexpr(sep, x) + 1, nchar(x))
}
s = c("dark_room")
left(s, "_")
#[1] "dark"
right(s, "_")
#[1] "room"
使用问题中的解决方案或答案中的任何其他解决方案定义自己的函数
left = function(x, sep){
substring(x, 1, regexpr(sep, x) - 1)
}
right = function(x, sep){
substring(x, regexpr(sep, x) + 1, nchar(x))
}
s = c("dark_room")
left(s, "_")
#[1] "dark"
right(s, "_")
#[1] "room"
一个类似于下面子部分的gsub选项:gsub[A-z]+\[A-z]+,\\2,暗室。一个类似于下面子部分的gsub选项:gsub[A-z]+\[A-z]+,\\2,暗室。