Команда для переименования нескольких переменных - PullRequest
0 голосов
/ 18 ноября 2018

После изменения моих данных у меня есть большой набор данных с именами столбцов, которые выглядят так: 1_abc 1_vwxyz 2_abc 2_vwxyz

Я хотел бы изменить имена столбцов, чтобы они выглядели так: abc_1 vwxyz_1 abc_2 vwxyz_2

Мой код выглядит так:

data <- tibble("1_abc" = c(1,2,3), "1_vwxyz" = c(10,11,12), 
"2_abc" = c(1,1,2),"2_vwxyz" = c(9,11,15))

data_renamed <- data %>%
rename_(.dots=setNames(names(.), paste(substr(names(.), start=3, stop=nchar(names(.))), 
                                         substr(names(.), start=1, stop=1))))

Я получаю эту ошибку:

Error in parse(text = x) : <text>:1:2: unexpected input
1: 1_
     ^

1 Ответ

0 голосов
/ 24 ноября 2018

Вот решение в базе R. Сначала вы берете имена столбцов как символьный вектор, конвертируете их в список двухэлементных символьных векторов, меняете их порядок в обратном порядке и складываете их вместе с _.

ll <- strsplit(colnames(data), pattern = "_")

# apply across this list of character vectors to reverse the order and concatenate
ll1 <- lapply(ll, function(x) paste(rev(x), collapse = "_"))

# unlist and assign them to the new data frame
data_renamed <- data
colnames(data_renamed) <- unlist(ll1)

#  A tibble: 3 x 4
#   abc_1 vwxyz_1 abc_2 vwxyz_2
#   <dbl>   <dbl> <dbl>   <dbl>
# 1     1      10     1       9
# 2     2      11     1      11
# 3     3      12     2      15
...