Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 更快地连接数据帧_R_Data.table_Dplyr - Fatal编程技术网

R 更快地连接数据帧

R 更快地连接数据帧,r,data.table,dplyr,R,Data.table,Dplyr,我目前正在通过一个id合并12个不同的数据帧,每个数据帧为480,00 obs,并添加列,因此它成为一个48k obs x 14变量数据帧。然而,这需要花费太长的时间来处理,我正在寻找一种更快的方法来处理 例子 dput: #一月数据 jan不知道这是否会更快,但是: list(jan = jan %>% rename(PRISM = PRISM_ppt_stable_4kmM2_193301_bil), feb = feb %>% rename(PRISM = PRIS

我目前正在通过一个id合并12个不同的数据帧,每个数据帧为480,00 obs,并添加列,因此它成为一个48k obs x 14变量数据帧。然而,这需要花费太长的时间来处理,我正在寻找一种更快的方法来处理

例子 dput:

#一月数据

jan不知道这是否会更快,但是:

list(jan = jan %>% rename(PRISM = PRISM_ppt_stable_4kmM2_193301_bil), 
     feb = feb %>% rename(PRISM = PRISM_ppt_stable_4kmM2_193302_bil), 
     mar = mar %>% rename(PRISM = PRISM_ppt_stable_4kmM2_193303_bil)) %>%
  bind_rows(.id = "month") %>%
  spread(month, PRISM)

下面是一种使用
数据表
重塑2

library(data.table)
library(reshape2)
# create a list of data frames, and coerce to data.tables
month_list <- lapply(list(jan,feb,mar),setDT)


# add id column with old variable name and rename value column 
for(i in seq_along(month_list)){
  set(month_list[[i]],j="ID",value = names(month_list[[i]])[2])
  setnames(month_list[[i]],  names(month_list[[i]])[2], "value")


}
# put in long form
long_data <- rbindlist(month_list)

# then use `dcast.data.table` to make wide

wide <- dcast.data.table(long_data, gridNumber~ID, value = 'value')
库(data.table)
图书馆(E2)
#创建数据帧列表,并强制为data.tables

月份列表在数据与
colnames()
合并后,我负责重命名。在这种情况下,所有PRISM列都必须具有相同的名称,才能使bind\u行正常工作。列表的名称(jan=)将在重塑后作为棱镜列的新名称结束,这非常快;虽然,我不明白中间的循环。为什么这是一个必要的步骤?@amsterl,for循环正在添加一列来标识数据集的名称(通过第二列的名称,然后重命名第二列,以允许数据以长格式存储在3列中)1.9.6中是否仍有必要加载
reforme2
?@jangorecki可能没有。可能值得注意的是,长格式的堆叠取决于列的类别是否相同(与OP相同)。。。在这种情况下,我会坚持长格式。
list(jan = jan %>% rename(PRISM = PRISM_ppt_stable_4kmM2_193301_bil), 
     feb = feb %>% rename(PRISM = PRISM_ppt_stable_4kmM2_193302_bil), 
     mar = mar %>% rename(PRISM = PRISM_ppt_stable_4kmM2_193303_bil)) %>%
  bind_rows(.id = "month") %>%
  spread(month, PRISM)
library(data.table)
library(reshape2)
# create a list of data frames, and coerce to data.tables
month_list <- lapply(list(jan,feb,mar),setDT)


# add id column with old variable name and rename value column 
for(i in seq_along(month_list)){
  set(month_list[[i]],j="ID",value = names(month_list[[i]])[2])
  setnames(month_list[[i]],  names(month_list[[i]])[2], "value")


}
# put in long form
long_data <- rbindlist(month_list)

# then use `dcast.data.table` to make wide

wide <- dcast.data.table(long_data, gridNumber~ID, value = 'value')