Как я могу сделать функцию в R для создания подмножеств столбцов? - PullRequest
3 голосов
/ 29 марта 2020

У меня есть фрейм данных в R с почти 40 годами (с 1980 по 2019 год) в столбцах, и мне нужна функция для создания нескольких подмножеств, берущих одну и ту же переменную и переименовывающих, затем я должен вставить другой фрейм данных ниже.

X1980 <- subset(all_data,select=c("Pais","RubroId","X1980"))
names(X1980)[names(X1980) == 'X1980'] <- 'Valor'
X1980$ANIO <- 1980

X1981 <- subset(all_data,select=c("Pais","RubroId","X1981"))
names(X1981)[names(X1981) == 'X1981'] <- 'Valor'
X1981$ANIO <- 1981

X1982 <- subset(all_data,select=c("Pais","RubroId","X1982"))
names(X1982)[names(X1982) == 'X1982'] <- 'Valor'
X1982$ANIO <- 1982

final_data <- rbind(X1980,X1981,X1982)

1 Ответ

1 голос
/ 29 марта 2020

Мы можем создать функцию со столбцами для выбора (cols_select) в качестве символьного вектора, names_to_change ('Valor' или любое другое имя столбца), подмножество набора данных ('dat') путем select, используя столбцы, задайте имя столбца и создайте новый столбец «ANIO»

f1 <- function(dat, cols_select, names_to_change){
     yearcol <- grep("^X\\d{4}$", cols_select, value = TRUE)
     tmpdat <- subset(dat,select=cols_select)
     names(tmpdat)[names(tmpdat) == yearcol] <- names_to_change
     tmpdat$ANIO <- as.integer(sub("^X", "", yearcol))
     tmpdat
  }

и используйте его в lapply

nm1 <- paste0("X", 1980:1982)
out <- do.call(rbind, lapply(nm1, function(x)
         f1(dat, cols_select = c("Pais","RubroId", x), "Valor")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...