[英]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_match
和gsub/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.