我有一个庞大的数据集,其中包含多个时间点(波浪)的问卷调查数据。问卷在每个点上都是相同的,因此变量以时间标记为“ 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#”。
谢谢!
答案 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+"))
注意:如果列名称已经是w1age
,w2age
... w100age
,并且当我们删除带数字的“ w”时,所有列将具有相同的列不鼓励使用的名称)。因此,可能我们可能需要用make.unique
包装以使列名唯一