如何根据包含的字符串的一部分选择列,然后在 R 中删除部分列名? (列位置可能不同)
Posted
技术标签:
【中文标题】如何根据包含的字符串的一部分选择列,然后在 R 中删除部分列名? (列位置可能不同)【英文标题】:How to select a column based on part of a contained string and then drop part of the column name in R? (Column position may vary) 【发布时间】:2022-01-13 22:22:58 【问题描述】:我正在编写一个函数来准备 R 中的数据框,以便稍后在回归中使用。我想重命名包含单词距离的任何列。具体来说,我想删除距离之前的第一个描述性词。 (因此这将包括单词距离开始之前的单词和句点)。
我有:
country.distance.median country.distance.mean population life.q state.distance.mean
210 189 10000 0.6. 100
3100 2100 20000 0.7. 300
37 36 500 0.3 10
我想要:
distance.median distance.mean population life.q distance.mean
210 189 10000 0.6 100
3100 2100 20000 0.7 300
37 36 500 0.3 10
因为这将包含在一个函数中,列的数量和位置是可变的,所以我需要一个不依赖于列位置的解决方案。请注意,它应该不更改列名“life.q”,因此解决方案需要同样能够根据距离字符串识别和选择列。请注意,距离前面的单词也可能会发生变化(例如,列“state.distance.mean”)。
(它还应该能够在函数中用作 if 语句。)
感谢您的时间和想法。 :)
【问题讨论】:
【参考方案1】:您可以在这里尝试使用sub
:
names(df) <- sub("^country\\.(?=distance\\.)", "", names(df), perl=TRUE)
df
distance.median distance.mean population life.q
1 210 189 10000 0.6
2 3100 2100 20000 0.7
3 37 36 500 0.3
更一般地说,要删除第一个以点开头的单词,前提是单词后面还有另一个点,您可以尝试:
names(df) <- sub("^[^.]+\\.(?=.*\\.)", "", names(df), perl=TRUE)
【讨论】:
谢谢!我对正则表达式非常陌生,想知道如何重写它,以便第一个句点和第一个句点本身之前的任何单词都不会被替换? (我已编辑问题以反映此要求) @ksweet 我在我原来的答案下面给了你一个替代答案,可能适合你的需要。 完美,谢谢。以上是关于如何根据包含的字符串的一部分选择列,然后在 R 中删除部分列名? (列位置可能不同)的主要内容,如果未能解决你的问题,请参考以下文章