R 有没有一种方法可以转换不同的列名

R 有没有一种方法可以转换不同的列名,r,R,例如,有没有一种方法可以用不同的列名转置dataframe Col A Col B Table1 Date Table1 Country Table2 Name Table2 Date Table3 ID Table3 Place 所需输出(具有相同名称的列应与日期一样在同一列中对齐) 似乎要获得所需的输出,您必须分别处理ColB值的>1个实例和只有1个实例的情况 备选案文1: library(data.table) setDT(df) df[, single := .N =

例如,有没有一种方法可以用不同的列名转置dataframe

Col A   Col B
Table1  Date
Table1  Country
Table2  Name
Table2  Date
Table3  ID
Table3  Place
所需输出(具有相同名称的列应与日期一样在同一列中对齐)


似乎要获得所需的输出,您必须分别处理
ColB
值的>1个实例和只有1个实例的情况

备选案文1:

library(data.table)
setDT(df)

df[, single := .N == 1L, ColB]
df[, b_id := frank(ColB, ties.method = 'dense')]

out <- 
  merge(
    dcast(df[single == F], ColA ~ b_id, value.var = 'ColB'),
    dcast(df[single == T], ColA ~ rowid(ColA), value.var = 'ColB'),
    by = 'ColA',
    all = T
  )

setnames(out, replace(paste0('Col', seq(0, ncol(out) - 1)), 1, names(out)[1]))

out
#      ColA Col1    Col2  Col3
# 1: Table1 Date Country  <NA>
# 2: Table2 Date    Name  <NA>
# 3: Table3 <NA>      ID Place
库(data.table)
setDT(df)
df[,单个:=.N==1L,ColB]
df[,b_id:=frank(ColB,ties.method='dense')]

out似乎要获得所需的输出,您必须分别处理
ColB
值的>1个实例和只有1个实例的情况

备选案文1:

library(data.table)
setDT(df)

df[, single := .N == 1L, ColB]
df[, b_id := frank(ColB, ties.method = 'dense')]

out <- 
  merge(
    dcast(df[single == F], ColA ~ b_id, value.var = 'ColB'),
    dcast(df[single == T], ColA ~ rowid(ColA), value.var = 'ColB'),
    by = 'ColA',
    all = T
  )

setnames(out, replace(paste0('Col', seq(0, ncol(out) - 1)), 1, names(out)[1]))

out
#      ColA Col1    Col2  Col3
# 1: Table1 Date Country  <NA>
# 2: Table2 Date    Name  <NA>
# 3: Table3 <NA>      ID Place
库(data.table)
setDT(df)
df[,单个:=.N==1L,ColB]
df[,b_id:=frank(ColB,ties.method='dense')]

要将答案标记为已接受,请单击答案旁边的复选标记将其从灰色变为已填写。要将答案标记为已接受,请单击答案旁边的复选标记将其从灰色变为已填写。
library(data.table)
setDT(df)    

df[, single := .N == 1L, ColB]
df[, b_id := 
       interaction(single, fifelse(single, rowid(ColA), frank(ColB, ties.method = 'dense')))]

dcast(df, ColA ~ paste0('Col', as.integer(b_id)), value.var = 'ColB')


#      ColA Col2 Col3    Col4
# 1: Table1 <NA> Date Country
# 2: Table2 Name Date    <NA>
# 3: Table3   ID <NA>   Place
df <- fread('
ColA   ColB
Table1  Date
Table1  Country
Table2  Name
Table2  Date
Table3  ID
Table3  Place
')