简体   繁体   English

如何在R中使用substring函数和apply?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM