R data.table ключи и имена столбцов. гармонизация - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь установить ключи для таблицы данных и сохранить исходные имена столбцов во второй строке. Все, что я пробовал до сих пор, изменяет имена столбцов на ключи и стирает исходные переменные. У меня есть десять data.tables для объединения, и все переменные имеют разные имена, как в примере. Поэтому я сделал ключи, но хотел бы сохранить оригиналы до согласования, просто чтобы быть уверенным.

library(tidyverse)
library(lubridate)
library(forcats)
library(stringr)
library(data.table)
library(rio)
library(dplyr)

1. Ключи

keys1 <- c("SDC_GENDER","SDC_CHILD_NB","LAB_CRP","PM_HIP")
keys2 <- c("SDC_GENDER","SDC_CHILD_NB","LAB_CRP","PM_HIP")

2. Пример data.table с именами переменных.

TD3 = data.table(q128 = c(1, 2, 1, 2), q129 = c(1, 5, 2, 4), q130 = c(0.8, 3.0, 10.0, NA), q131 = c(55, 56, 80, 79))
TD3
TD4 = data.table(q128 = c(1, 1, 1, 2), q129 = c(1, 3, 2, 999), q130 = c(0.9, 3.1, NA, 9.0), q131 = c(58, 60, 45, NA))
TD4

1 Ответ

0 голосов
/ 20 февраля 2020

Я не уверен, что это действительно та структура данных, которую вы хотите иметь, то есть смешанные типы переменных, как сказал r2evans. Однако ... это решение работает. Просто поместите все ваши маленькие data.tables в список и вуаля.

Я заметил, что keys1 и keys2 идентичны, поэтому я просто использовал один из них. Если они должны быть разными ключами для каждого из них, они также могут быть перечислены.

keys1 <- c("SDC_GENDER","SDC_CHILD_NB","LAB_CRP","PM_HIP")
TD <- list()
TD[[1]] = data.table(q128 = c(1, 2, 1, 2), q129 = c(1, 5, 2, 4), q130 = c(0.8, 3.0, 10.0, NA), q131 = c(55, 56, 80, 79))
TD[[2]] = data.table(q128 = c(1, 1, 1, 2), q129 = c(1, 3, 2, 999), q130 = c(0.9, 3.1, NA, 9.0), q131 = c(58, 60, 45, NA))
TD <- lapply(TD, FUN = function(x){
  oldcolumns <- colnames(x)

    td <- data.table(
    'V1' = oldcolumns[1],
    'V2' = oldcolumns[2],
    'V3' = oldcolumns[3],
    'V4' = oldcolumns[4]
  )
    colnames(td) <- keys1
  colnames(x) <- keys1

  x <- rbind(td, x)
  return(x)

})
...