【发布时间】:2019-09-03 08:38:50
【问题描述】:
假设我有以下数据集:
df <- read.table(header=TRUE, text="name value
stranger_things_mc Stranger_Land
stranger_things_confidence 100
stranger_things_importance 1
stranger_things_answer Stranger_Things
immigrant_crime_number 140
immigrant_crime_confidence 100
immigrant_crime_importance 3
immigrant_crime_answer 50
dog_things_mc Stranger_Land
dog_things_confidence 100
dog_things_importance 1
dog_things_answer Stranger_Things
fighting_stats_number 140
fighting_stats_confidence 100
fighting_stats_answer 50")
每第四行应该包含三个后缀(_confidence、_importance、_answer),但有时不包含(如上面的“fighting_stats”)。一行有时有 (_mc) 后缀,有时它会显示 (_number 或 _slider)。
我想过滤掉任何包含(_number 或 _slider)以及与该 _number 或 _slider 列关联的三行的行。因此,在上面的示例中,结果输出将是:
df <- read.table(header=TRUE, text="name value
stranger_things_mc Stranger_Land
stranger_things_confidence 100
stranger_things_importance 1
stranger_things_answer Stranger_Things
dog_things_mc Stranger_Land
dog_things_confidence 100
dog_things_importance 1
dog_things_answer Stranger_Things")
我可以像这样过滤掉特定的列:
final_results <- df %>%
filter(!str_detect(name, "_number") & !str_detect(name, "_slider"))
但无法弄清楚如何删除所有关联的列。一般算法应该是:
首先,在名称列中找到带有“_number”或“_slider”的行,然后抓取它之前的文本。在上面的示例中,这将是“fighting_stats”和“immigrant_crime”。然后,删除任何包含该文本的行。
【问题讨论】: