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

Hun*_*ter 2 loops replace r rename multiple-columns

我有一个很大的数据集,其中包含多个时间点(波浪)的问卷调查数据。问卷在每个点都是相同的,因此变量以时间标记为“ 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"))
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Tim*_*sen 5

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

names(Data) <- sub("^w\\d+", "", names(Data))
Run Code Online (Sandbox Code Playgroud)

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


akr*_*run 5

一个选项tidyverserename_at。仅指定列名需要与变化matches,并str_remove去除串“W”后面跟着一个或多个数字

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

注意:如果列名已经是w1age, w2age...w100age并且当我们删除后跟数字的 'w' 时,所有列都将具有相同的列名,这是不鼓励的)。所以,可能,我们可能需要换行make.unique以使列名唯一