从R中的多列中删除字符串

时间:2019-05-16 14:54:15

标签: r loops replace multiple-columns rename

我有一个庞大的数据集,其中包含多个时间点(波浪)的问卷调查数据。问卷在每个点上都是相同的,因此变量以时间标记为“ w#variablename”(例如“ w1age”,“ w2age”,“ w3age”)。

我按每个时间点将较大的文件拆分为数据帧,因此现在我想从每列的列名中删除“ w#”。

基本上,我想使用R来“查找并替换”以删除任何带有“ w1”的列。

我按如下方式分割数据:

w1 = Data %>% select(matches("w1"))
w2 = Data %>% select(matches("w2"))
w3 = Data %>% select(matches("w3"))
w4 = Data %>% select(matches("w4"))

现在对于这4个数据集的每一个,我想从列名中删除相应的“ w#”。

谢谢!

2 个答案:

答案 0 :(得分:5)

我们应该可以在这里使用sub

names(Data) <- sub("^w\\d+", "", names(Data))

正则表达式模式^w\\d+在每个列名w的开头匹配,后跟一个或多个数字。然后,我们将其替换为空字符串,从而有效地从匹配的列名称中删除此前缀。

答案 1 :(得分:3)

带有tidyverse的选项为rename_at。仅指定需要使用matches进行更改的列名称,并使用str_remove删除子字符串“ w”,后跟一个或多个数字

library(dplyr)
library(stringr)
Data %>% 
   rename_at(vars(matches("^w\\d+")), ~ str_remove(., "^w\\d+"))

注意:如果列名称已经是w1agew2age ... w100age,并且当我们删除带数字的“ w”时,所有列将具有相同的列不鼓励使用的名称)。因此,可能我们可能需要用make.unique包装以使列名唯一