转换(dcast)分配新的列标题时,是否可以更改默认分隔符?

我正在将文件从长到宽转换,并且得到以下 header :

value_1, value_2, value_3,...

在重塑中,您可以分配“sep”参数(sep =“”)和列标题输出,就像我希望它们那样:
value1, value2, value3,...

但是,重塑需要花费数分钟才能处理超过200,000行的数据帧,而dcast则需要数秒。 dcast还会按我想要的顺序输出列,而不会进行重塑。有什么简单的方法可以使用dcast更改输出,还是需要手动更改列标题?

例如:
example <- data.frame(id=rep(c(1,2,3,4),4),index=c(rep(1,4),rep(2,4),rep(1,4),rep(2,4)),variable=c(rep("resp",8),rep("conc",8)),value=rnorm(16,5,1))
dcast(example,id~variable+index)

该示例提供了列标题:
conc_1, conc_2, resp_1, resp_2

我希望列标题读取:
conc1, conc2, resp1, resp2

我试过了:
dcast(example,id~variable+index,sep="")

dcast似乎完全忽略了sep,因为给定符号也不会更改输出。

最佳答案

您不能,因为该选项未合并到dcast中。但是在运行dcast之后执行此操作相当简单。

casted_data <- dcast(example,id~variable+index)


library(stringr)
names(casted_data) <- str_replace(names(casted_data), "_", ".")

> casted_data
  id   conc.1   conc.2   resp.1   resp.2
1  1 5.554279 5.225686 5.684371 5.093170
2  2 4.826810 5.484334 5.270886 4.064688
3  3 5.650187 3.587773 3.881672 3.983080
4  4 4.327841 4.851891 5.628488 4.305907

# If you need to do this often, just wrap dcast in a function and
# change the names before returning the result.

f <- function(df, ..., sep = ".") {
    res <- dcast(df, ...)
    names(res) <- str_replace(names(res), "_", sep)
    res
}

> f(example, id~variable+index, sep = "")
  id   conc1   conc2   resp1   resp2
1  1 5.554279 5.225686 5.684371 5.093170
2  2 4.826810 5.484334 5.270886 4.064688
3  3 5.650187 3.587773 3.881672 3.983080
4  4 4.327841 4.851891 5.628488 4.305907

关于r - 更改类型转换中的默认分隔符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12516967/

10-12 17:46