如何 select 基于包含字符串的一部分的列,然后在 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)

我正在编写一个函数来准备 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”,因此解决方案需要能够根据距离字符串同样识别和 select 列.请注意,distance 前面的单词也可能会发生变化(例如,'state.distance.mean' 列)。

(它也应该能够在函数中用作 if 语句。)

感谢您的宝贵时间和想法。 :)

您可以在此处尝试使用 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)