簡體   English   中英

根據來自其他列的正則表達式捕獲組的值有效地將列添加到數據框

[英]Efficiently adding column to dataframe based on values from regex capture groups from other columns

我想向現有數據添加一個額外的列,其中newColumn的值將基於應用於同一行中另一個值的正則表達式的捕獲組,到目前為止我想出的唯一有效的是這個(可能不是 R 式)循環的標准方法,但它非常慢(對於大約 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 但我的方法都沒有產生預期的結果。 這甚至可以通過 apply-family 的功能實現,如果是:如何?

例子:

為了

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

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"  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM