如何使用dcast更改列名称?

时间:2019-05-08 16:05:25

标签: r data.table dcast

我正在将我的数据从长转换为宽。部分数据是日期。 我的问题是我想使用其他姓氏。 它形成像variable_1-1,我想1-1_variable。

df:

    SN specimen_isolate_no isolaat materiaal_lokatie alarmniveau afnamedatum
 1:  2                 1-1  STAPEP Bloedkweek  Bloed       0      2017-04-30
 2:  3                 1-1  KLEBOX      Bloedkweek         0      2018-12-30
 3:  3                 2-1  KLEBOX      Bloedkweek         0      2018-12-31

我尝试从data.table进行dcast:

setDT(df) 
df.wide <- dcast(df, SN ~ specimen_isolate_no, value.var = c("materiaal_lokatie","afnamedatum", "isolaat", "alarmniveau" ))

给我以下结果:

colnames: 
[1] "SN"                    "materiaal_lokatie_1-1" "materiaal_lokatie_2-1" 
 "afnamedatum_1-1"            "afnamedatum_2-1"        "isolaat_1-1"          
      "isolaat_2-1"                  "alarmniveau_1-1"    "alarmniveau_2-1"       

这个结果还可以,但是我宁愿使用诸如sample_isolate_no_variable之类的别名,例如1-1_alarmniveau。

为了实现这一目标,我尝试了

molten <- melt(df, id.vars = c("SN", "specimen_isolate_no"))
dfmolton <- dcast(molten, SN ~ specimen_isolate_no + variable)

#and 

 df %>% 
     gather(key, value, -SN, -specimen_isolate_no) %>%  
     unite(new.col, c(specimen_isolate_no,key )) %>%   
     spread(new.col, value) 

但是这两个选项都弄乱了我的约会日期,我不知道该如何解决。

 #colnames:
 [1] "SN"                    "1-1_isolaat"           "1-1_materiaal_lokatie" "1-1_alarmniveau"       "1-1_afnamedatum"       "2-1_isolaat"           "2-1_materiaal_lokatie" "2-1_alarmniveau"      "2-1_afnamedatum"   

dfmolten$`1-1_afnamedatum`
[1] "17286" "17895"

所以我的问题是:有人可以使用dcast更改姓氏的形成吗?

1 个答案:

答案 0 :(得分:2)

正如弗兰克(Frank)所述,对此有一个出色的功能要求...旁注:请添加您想要的FR的反应,我们在某种程度上可以利用它来引导开发时间:

https://github.com/Rdatatable/data.table/issues/3189

同时,您可以使用setnames和一些正则表达式来做到这一点:

old = grep('SN', names(df.wide), value = TRUE, invert = TRUE, fixed = TRUE)
new = sapply(strsplit(old, '_', fixed = TRUE), function(x) paste(rev(x), collapse = '_'))
setnames(df.wide, old, new)