首页 > 解决方案 > R:从文本数据中排除各种垃圾

问题描述

我有一个包含各种垃圾的庞大文本数据集。下面的虚拟数据代表了数据集中垃圾的多样性。虽然outcome列包含要清理的数据,但text_group列显示垃圾的类型。这clean_outcome是想要的结果。

foo_df <- tibble(outcome = c(
  "Dwayne Mourinho : PPP : 22/05/16 : WCY011068",
  "Sarry Bedford : FamSuppr : 14/06/16 : ZAK0",
  "Awanui Moutinho : FamChild : 14/02/14 : BAS007083",
  "Allyson Bosere : Budgetng : 03/08/16 : XAP005407",
  "Anneke Peter : PAFT : 17/12/12 : MAI005518",
  "Budget for the Math",
  "Parenting programs",
  "WINZ",
  "IRD",
  "Baby First Aid Cert. - 00BC61FB",
  "Stop taking drugs - 81868C49",
  "Pamela Riri - LBM2925 - Breast Feeding",
  "Afunbiowo Ige - GMY3480 - AOD",
  "Paora Fowler - Literacy & Numeracy",
  "Yang Wilson - Literacy & Numeracy",
  "Samuel Bell - Literacy & Numeracy",
  "COVID-19 Outcome - Johnson Buhari",
  "Positive Parenting Programme (Triple P)-Kanu Babayaro",
  "Goals : Wx000371",
  "Mentoring : WO000372",
  NA
),
text_group = c(
  1,1,1,1,1,
  2,2,2,2,
  3,3,
  4,4,
  5,5,5,
  6,6,
  7,7,
  8
),
clean_outcome = c(
  "PPP",
  "FamSuppr",
  "FamChild",
  "Budgetng",
  "PAFT",
  "Budget for the Math",
  "Parenting programs",
  "WINZ",
  "IRD",
  "Baby First Aid Cert.",
  "Stop taking drugs",
  "Breast Feeding",
  "AOD",
  "Literacy & Numeracy",
  "Literacy & Numeracy",
  "Literacy & Numeracy",
  "COVID-19 Outcome",
  "Positive Parenting Programme (Triple P)",
  "Goals",
  "Mentoring",
  NA)
)

我发现stackoverflowpage1stackoverflowpage2的贡献部分有用,但仍不能完全清理数据(即outcome)。

经过深入研究outcome,我观察到以下叙述:

如果文本有日期,分隔符是冒号,数据在第一个和第二个分隔符之间

如果文本有一个破折号分隔符,没有名称,则数据在分隔符之前

在大多数情况下,如果文本有一个破折号分隔符,带有名称,则数据在分隔符之后

如果文本有两个破折号分隔符,则数据在第二个分隔符之后

如果文本有一个冒号分隔符,则数据在分隔符之后

这个功能:

colon_function <-  function(x){
if(str_count(x, ":") == 3) {
  trimws(str_split(x, ":")[[1]][[2]])
}else x}

如果文本有日期,则清除数据,并且分隔符是冒号并且数据在第一个和第二个分隔符之间(即foo_df$text_group == 1)。

我需要帮助才能在 R 代码中包含其他条件,以便我可以得到诸如 in 之类的结果clean_outcome

谢谢。

标签: rtextdata-cleaningstringrdata-wrangling

解决方案


推荐阅读