[英]How to use substring function with apply in R?
The dataset contains information about superheroes. 数据集包含有关超级英雄的信息。 This code removes the annoying bracket part from the string 'name':
此代码从字符串“ name”中删除了令人讨厌的括号部分:
# package loading
library(fivethirtyeight)
# data opening
data(package ="fivethirtyeight")
data(comic_characters)
for (i in 1:length(comic_characters$name))
{
bracket[i] <- which(strsplit(comic_characters$name[i], "")[[1]] == "(")
comic_characters$name[i] <- substr(comic_characters$name[i], start = 1, stop = bracket[i]-2)
}
How can I do the same thing using apply functions (without for loop)? 如何使用Apply函数(没有for循环)做同样的事情? Here's how I tried:
这是我尝试的方法:
bracket = sapply(sapply(strsplit(comic_characters$name, ''), function(x)
which(x == '(')), `[`, 1)
# here comes the problem:
comic_characters$name <- lapply(x, function(x)
substr(comic_characters$name, start=1, stop=bracket[i]-2))
How can I do this? 我怎样才能做到这一点? Thank you in advance!
先感谢您!
Wouldn't this achieve the same thing? 这样不能达到相同的目的吗?
df <- data.frame(comic_characters)
df$name <- sub("\\(.*", "", df$name)
You could use the stringr
package to achieve your goal. 您可以使用
stringr
包来实现您的目标。
# package loading
library(fivethirtyeight)
library(stringr)
# data opening
data(package ="fivethirtyeight")
data(comic_characters)
# remove text enclosed in brackets from character names
cleaned_character_names <- str_replace_all(
string = comic_characters$name,
pattern = "\\(.*\\)",
replacement = ""
)
# trim whitespace from start and ending of the character names
cleaned_character_names <- str_trim(
string = cleaned_character_names
)
Some of the character names have two parts that are enclosed in brackets, eg "Rogue (Anna Marie) (Earth-616)". 某些字符名称有两部分放在方括号中,例如“ Rogue(Anna Marie)(Earth-616)”。 The code above will remove both "(Anna Marie)" and "(Earth-616)" from the character name.
上面的代码将从角色名称中同时删除“((Anna Marie)””和“(Earth-616)”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.