переименование столбцов в Y X1 X2 X3 X4 .. XN - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть некоторые данные, такие как:

data(iris)

Я хочу переименовать столбцы так, чтобы Species была переменной Y, а все другими переменными были предикторами.

То, что у меня есть ток, не дает мне результата, который я ищу.

iris %>%
  select(Species, everything()) %>% # move the Y variable to the "front"
  rename(Y = 1) %>%
  rename_at(vars(2:ncol(.)), ~ paste("X", seq(2:ncol(.)), sep = ""))

Ожидаемый результат будет именами:

Y, X1, X2, X3, X4, X5... XN

Ответы [ 4 ]

2 голосов
/ 28 сентября 2019

Я переставляю ваши шаги, чтобы избежать необходимости делать какие-либо поднаборы при создании имен.Вместо этого дайте первому столбцу имя X0, зная, что вы собираетесь изменить его на Y.

library(dplyr)

iris %>%
  select(Species, everything()) %>% 
  setNames(paste0("X", seq_along(.) - 1)) %>%
  rename(Y = 1) %>%
  head()
#>        Y  X1  X2  X3  X4
#> 1 setosa 5.1 3.5 1.4 0.2
#> 2 setosa 4.9 3.0 1.4 0.2
#> 3 setosa 4.7 3.2 1.3 0.2
#> 4 setosa 4.6 3.1 1.5 0.2
#> 5 setosa 5.0 3.6 1.4 0.2
#> 6 setosa 5.4 3.9 1.7 0.4
2 голосов
/ 28 сентября 2019

Что пошло не так

Ошибка в вашем коде состоит в том, что он предполагает, что второй . (в анонимной функции) является tibble , хотя на самом деле это символ вектор.Следовательно, ncol(.) неуместно, и вместо этого должно быть length(.).Кроме того, нет необходимости в seq(), и, учитывая вывод, который вы запрашивали, он должен начинаться с 1. В конце концов, вам было бы хорошо:

iris %>%
  select(Species, everything()) %>% # move the Y variable to the "front"
  rename(Y = 1) %>%
  rename_at(vars(2:ncol(.)), ~ paste("X", 1:length(.), sep = ""))

Другие ответы предоставляют альтернативные способы выражения этогооперация.Возможно более чистая версия будет

iris %>%
  select(Species, everything()) %>% # move the Y variable to the "front"
  rename(Y = 1) %>%
  rename_at(vars(-1), ~ str_c("X", seq_along(.)))
0 голосов
/ 28 сентября 2019

Решение с базовыми функциями r:

colnames(iris) <- c("X1", "X2", "X3", "X4", "Y") # rename columns
iris[,c(5,1,2,3,4)] # reorder 

            Y  X1  X2  X3  X4
 #  1  setosa 5.1 3.5 1.4 0.2
 #  2  setosa 4.9 3.0 1.4 0.2
 #  3  setosa 4.7 3.2 1.3 0.2
 #  4  setosa 4.6 3.1 1.5 0.2
 #  5  setosa 5.0 3.6 1.4 0.2
0 голосов
/ 28 сентября 2019

Вы можете установить colnames напрямую вместо использования иногда привередливых rename функций:

iris %>%
    select(Species, everything()) %>% # move the Y variable to the "front"
    `colnames<-`(c('Y', paste("X", seq(2:ncol(.)), sep = ""))) %>%
    head

       Y  X1  X2  X3  X4
1 setosa 5.1 3.5 1.4 0.2
2 setosa 4.9 3.0 1.4 0.2
3 setosa 4.7 3.2 1.3 0.2
4 setosa 4.6 3.1 1.5 0.2
5 setosa 5.0 3.6 1.4 0.2
6 setosa 5.4 3.9 1.7 0.4

Этот вопрос объясняет, почему `colnames<-` работает как функция в конвейере: use%>% с функциями замены, такими как colnames () <- </a>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...