根据来自其他列的正则表达式捕获组的值,有效地将列添加到数据框

问题描述 投票:1回答:1

我想在现有数据框中添加一个额外的列,其中newColumn的值将基于应用于同一行中另一个值的正则表达式的捕获组,而我到目前为止唯一能够实现的是这个(可能是不是R-esque)循环的标准方法,但是它非常慢(对于大约150万行的DF)。

带列的数据框:

ID    Text    NewColumn

Atm我用这个:

df$newColumn <- rep("", nrow(df));
for (row in 1:nrow(df)) {
    df$newColumn[row] <- str_match(df$Text[row], regex)[1,2];
} 

我在阅读了几篇文章后尝试过使用apply / lapply,但我的方法都没有创建预期的结果。这是应用系列的功能甚至可能,如果是的话:如何?

例:

对于

regex <- "^[0-9]*([a-zA-Z]*)$";

和一个如下表:

ID   Text         
------------------
1    231Ben
2    112Claudine
3    538Julia

我希望:

ID   Text          NewColumn
----------------------------
1    231Ben          Ben
2    112Claudine     Claudine
3    538Julia        Julia
r loops
1个回答
1
投票

str_matchgsub/sub等是矢量化的,所以如果pattern是相同的,我们不必遍历行

df1$NewColumn <- gsub("\\d+", "", df1$Text)

或者使用stringr功能

library(stringr)
df1$NewColumn <- str_match(df1$Text, "([A-Za-z]+)")[,1] 

str_extract(df1$Text, "[A-Za-z]+")
#[1] "Ben"      "Claudine" "Julia"  
© www.soinside.com 2019 - 2024. All rights reserved.