R data.table键和列名。协调

R data.table键和列名。协调,r,merge,data.table,key,tidyverse,R,Merge,Data.table,Key,Tidyverse,我试图在data.table中设置键,并将原始列名保留在第二行。到目前为止,我所做的一切都是将列名更改为键,并删除原始变量。我有十个data.tables要合并,所有变量都有不同的名称,如示例中所示。所以我做了钥匙,但为了确定,我想在协调之前保留原版 library(tidyverse) library(lubridate) library(forcats) library(stringr) library(data.table) library(rio) library(dplyr) 1.钥

我试图在data.table中设置键,并将原始列名保留在第二行。到目前为止,我所做的一切都是将列名更改为键,并删除原始变量。我有十个data.tables要合并,所有变量都有不同的名称,如示例中所示。所以我做了钥匙,但为了确定,我想在协调之前保留原版

library(tidyverse)
library(lubridate)
library(forcats)
library(stringr)
library(data.table)
library(rio)
library(dplyr)
1.钥匙
我不确定这是否真的是您想要的数据结构,也就是像r2evans所说的混合变量类型。然而,这个解决方案是有效的。把你所有的小数据表放到一个列表里,瞧

我注意到键1和键2是相同的,所以我只使用了其中一个。如果它们应该是不同的键,也可以列出它们

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)

})

keys 1所有data.frames是否具有完全相同的结构,即列数?将列名保留在第二行对我来说毫无意义。不能像这里一样,在一行上有
字符
,在另一行上有
数字
。您所说的与大多数语言中的数据帧定义不兼容。在重命名之前,您可以将旧名称保存到其他位置(而不是每个帧中)。是的,在此阶段,列数相同。我为每个data.table中的每个列的每个变量名设置了键。原始列名就像q128、q129、q130等等。但每个R数据表都不同。我试着用SDC_性别等键来协调表格。但此时,我们希望将键和原始变量名都保留在data.tables中。现在我有了相同的表,表中有原始的变量列名和键。现在我注意到,虽然很累,但两个data.tables都使用了相同的变量名(q128…)。应该是不一样的,所以他们不会。我来举个新例子,谢谢!我要试试这个!如果您可以在同一个表中同时看到原始标签和键,那么此时就可以更清楚地协调表。
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
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)

})