我有以下模式的資料框:
tibble [9 x 2] (S3: tbl_df/tbl/data.frame)
$ Date: chr [1:9] "Tuesday 4 October 2022" "Wednesday 5 October 2022" "Thursday 6 October 2022" "Note that:"
$ EVENTS CALENDAR : chr [1:9] "A61" "A32" "A51" "29 Jan 2029"
我想在第一列中洗掉包含“注意:”的整行,在第二列中洗掉“2029 年 1 月 29 日”(位于資料框底部)。
我已經能夠通過使用很容易地實作它:
df <- df[!grepl("Note that:", df$`Date: 15-Oct-2022`),]
但是,鑒于“日期:2022 年 10 月 15 日”標題將在當天更改,我想提出一個更動態的解決方案來洗掉這個多余的行。
嘗試使用 grepl 按列索引洗掉不起作用,并且似乎使整個資料框空白。
洗掉最后一行后,我嘗試使用以下方法將日期欄位轉換為更傳統的格式:
df$`Date: 15-Oct-2022` <- as.Date(df$`Date: 15-Oct-2022`, format = "%A %d %B %Y")
雖然再次嘗試使用列索引來進行轉換會導致錯誤,我認為是類似的原因。
任何建議將不勝感激。
uj5u.com熱心網友回復:
用于df[[1]]指代列:
df <- df[!grepl("^Note that", df[[1]]),]
df[[1]] <- as.Date(df[[1]], format = "%A %d %B %Y")
如果您不知道目標列是第 1 列,那么您可以找出它是哪一列,如下所示:
target_column = which(grepl("^Date", names(df)))
然后改用它:
df <- df[!grepl("^Note that", df[[target_column]]),]
df[[target_column]] <- as.Date(df[[target_column]], format = "%A %d %B %Y")
uj5u.com熱心網友回復:
Withdplyr我們可以只使用一個簡單的filter操作。如果我們必須過濾掉任何變數匹配所需模式的行,我們可以使用if_any()
library(dplyr)
df %>%
filter(!grepl("Note that:", Date))
# A tibble: 3 × 2
Date EVENTS_CALENDAR
<chr> <chr>
1 Tuesday 4 October 2022 A61
2 Wednesday 5 October 2022 A32
3 Thursday 6 October 2022 A51
如果我們必須過濾掉任何變數匹配所需模式的行,我們可以使用if_any()
df %>%
filter(!if_any(everything(), ~grepl("Note that:", .x)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/515283.html
標籤:rgrepl截止日期
