R 有没有一种解决方案比从长格式转换到宽格式转换的重塑更具性能?

R 有没有一种解决方案比从长格式转换到宽格式转换的重塑更具性能?,r,performance,dataframe,reshape,R,Performance,Dataframe,Reshape,我有一小段代码将数据帧从长转换为宽 library(reshape2) mydata <- structure(list(issn = c("1980-4814", "1945-3116", "1681-4835", "1367-0751", "1516-6104", "1359-7566", "2319-0795", "1390-6615", "1808-8023", "1746-4269", "1852-2181", "0022-4596", "1808-2386", "0254-60

我有一小段代码将数据帧从长转换为宽

library(reshape2)
mydata <- structure(list(issn = c("1980-4814", "1945-3116", "1681-4835", "1367-0751", "1516-6104", "1359-7566", "2319-0795", "1390-6615", "1808-8023", "1746-4269", "1852-2181", "0022-4596", "1808-2386", "0254-6051", "1981-3686", "1077-2618", "1809-3957", "2179-5746", "0147-6513", "1070-5503"), periodico = c("ABCustos (", "Journal of", "The Electr", "Logic Jour", "DIREITO, E", "REGIONAL &", "REVISTA FÓ", "UMBRAL: RE", "Segurança ", "Journal of", "Augm Domus", "Journal of", "BBR. Brazi", "Jinshu Rèc", "Revista Br", "IEEE Indus", "Revista SO", "Biota Amaz", "Ecotoxicol", "Internatio"), qualis = c("B4", "B3", "B2", "B2", "A1", "B5", "B5", "C ", "B5", "B3", "B3", "A1", "B4", "B3", "B5", "A2", "C ", "B3", "A2", "B1"), area = c(1L, 1L, 1L, 2L, 3L, 3L, 3L, 3L, 4L, 5L, 6L, 6L, 7L, 7L, 7L, 8L, 8L, 9L, 9L, 9L)), .Names = c("issn", "periodico", "qualis", "area"), row.names = c(1L, 501L, 1001L, 1501L, 2001L, 2501L, 3001L, 3501L, 4001L, 4501L, 5001L, 5501L, 6001L, 6501L, 7001L, 7501L, 8001L, 8501L, 9001L, 9501L), class = "data.frame")

reshape(mydata, direction = "wide", 
        idvar = c("issn", "periodico"), 
        timevar = "area")
library(重塑2)

mydata对于重塑问题,
data.table中的
dcast
经过高度优化,效率非常高,应该比当前可用的任何软件包都要快

library(data.table)
dcast(setDT(mydata), issn+periodico~area, value.var = "qualis")

对于重塑问题,
data.table
中的
dcast
经过高度优化,效率非常高,应该比当前可用的任何软件包都要快

library(data.table)
dcast(setDT(mydata), issn+periodico~area, value.var = "qualis")

您可以为此使用
dplyr
tidyr

library(dplyr)
library(tidyr)
mydata %>% 
  mutate(area = paste('qualis',area,sep=".")) %>% 
  spread(area, qualis)

您可以为此使用
dplyr
tidyr

library(dplyr)
library(tidyr)
mydata %>% 
  mutate(area = paste('qualis',area,sep=".")) %>% 
  spread(area, qualis)

使用
data.table
中的
dcast
。我认为
dcast
解决方案已经出现在之前的dupe链接中,该链接指向由发布的类似问题you@akrundcast解决方案不再像我在其他类似帖子中所展示的那样工作了。由于我的英语能力有限,你似乎不太清楚。我在这里找到的答案并没有解决分类/名义数据问题,它们集中在聚合数值上,这不是我的情况。不确定为什么它不起作用output@akrun这快把我逼疯了。我很快就收到了您对dcast的建议,但是使用这个提取的小数据帧,它与原始数据帧相比非常好,它给了我dcast(setDT(dfPub),issn+periodico~area,value.var=“qualis”)聚合函数缺失,默认为“length”。在两个df中运行str,它们显示相同的结构。@akrun可能与编码有关,我不知道,但请检查,在dcast(setDT(dataset[1:1789,])、issn+periodico~area、value.var=“qualis”)之前,我发现它在相对较大的切片上运行良好然后它突然改变了1790记录。使用
data.table
中的
dcast
。我认为
dcast
解决方案已经出现在之前的dupe链接中,该链接指向由发布的类似问题you@akrundcast解决方案不再像我在其他类似帖子中所展示的那样工作了。由于我的英语能力有限,你似乎不太清楚。我在这里找到的答案并没有解决分类/名义数据问题,它们集中在聚合数值上,这不是我的情况。不确定为什么它不起作用output@akrun这快把我逼疯了。我很快就收到了您对dcast的建议,但是使用这个提取的小数据帧,它与原始数据帧相比非常好,它给了我dcast(setDT(dfPub),issn+periodico~area,value.var=“qualis”)聚合函数缺失,默认为“length”。在两个df中运行str,它们显示相同的结构。@akrun可能与编码有关,我不知道,但请检查一下,我发现它在相对较大的切片上工作良好,直到dcast(setDT(dataset[1:1789,])、issn+periodico~area、value.var=“qualis”),然后它突然将其更改为1790记录。