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#”。
谢谢!
我们应该可以sub在这里使用:
names(Data) <- sub("^w\\d+", "", names(Data))
Run Code Online (Sandbox Code Playgroud)
正则表达式模式^w\\d+在每个列名的开头匹配,w后跟一个或多个数字。然后,我们将其替换为空字符串,从而有效地从匹配的列名称中删除此前缀。
一个选项tidyverse是rename_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以使列名唯一