如何使用 dcast 更改列名?
How do I change the column names using 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"
这个结果还可以,但我宁愿像 specimen_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 更改 colnames 的格式吗?
正如 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)
我正在将我的数据从长数据转换为宽数据。部分数据是日期。 我的问题是我想要其他的同名。 它的格式类似于 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"
这个结果还可以,但我宁愿像 specimen_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 更改 colnames 的格式吗?
正如 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)