Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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
用值填充data.frame。如何加快这一进程?_R - Fatal编程技术网

用值填充data.frame。如何加快这一进程?

用值填充data.frame。如何加快这一进程?,r,R,我当前正在尝试用另一个data.frame中的值填充空data.frame。首先,我用相应的维度初始化一个空的data.frame,然后使用for循环用另一个data.frame中包含的值填充这个data.frame。有没有一种方法可以使用apply type函数来加速该过程 提前感谢,, 本尔 更新2:修复了示例 set.seed(8760) k <- c(rep(1:4, each = 6)) i <- paste(rep(LETTERS[1:6], times=4)) valu

我当前正在尝试用另一个data.frame中的值填充空data.frame。首先,我用相应的维度初始化一个空的data.frame,然后使用for循环用另一个data.frame中包含的值填充这个data.frame。有没有一种方法可以使用apply type函数来加速该过程

提前感谢,, 本尔

更新2:修复了示例

set.seed(8760)
k <- c(rep(1:4, each = 6))
i <- paste(rep(LETTERS[1:6], times=4))
value <- sample(1:10000, 24)

input <- data.frame(k, i, value)

u_n <- unique(input$i)
id <- unique(input$k)

#' doConversion
#' 
#' Converts a dataset from original gdx version to more readable version.
#' 
#' @param x dataframe containing results of reporting.gms (sum_generation_parameter).
#' @return dataframe with EU-aggregated generation
#' @author BenR
doConversion <- function(x){
  stopifnot(class(x) %in% c("data.frame","matrix") &
              names(x) == c("k","i","value"))

  # get technology name and temporal id
  u_n <- unique(x$i)
  id <- unique(x$k)

  # initialise data.frame containing all zeros and the right names
  nodata <- data.frame(setNames(replicate(length(u_n),numeric(length(id)), simplify = F), u_n))
  data <- cbind(id, nodata)

  # assign values to particular entries of the data.frame
  for (i in colnames(data[, 2:ncol(data)])){
    for (j in id){
      if(length(rownames(x[which(x$i == i & x$k == j) , ])==0)){
        help <- x[which(x$i == i & x$k == j), "value"]
        data[which(data$id == j) ,i ] <- help
      }
    }
  }
  return(data)
}

r <- doConversion(input)
set.seed(8760)
k你的功能:

doConversion(input)
#  id    A    B    C    D    E    F
#1  1 6947 6344 6291 2182 5430 9555
#2  2 2758 4375 7649 3096 8325 1109
#3  3 6073  168 2265 8739 6293 9003
#4  4 6278 1994 8597  332 2716 6504
使用Reformae2软件包:

library(reshape2)
dcast(input, k ~ i)
#  k    A    B    C    D    E    F
#1 1 6947 6344 6291 2182 5430 9555
#2 2 2758 4375 7649 3096 8325 1109
#3 3 6073  168 2265 8739 6293 9003
#4 4 6278 1994 8597  332 2716 6504

但是,正如我在评论中所说,您输入的长格式通常更适合R中的数据处理。

提供示例输入,并显示和解释预期输出。感谢您的建议/建议。我更新了我的问题。现在解释一下你的代码应该实现什么。(你的目标不是用值填充矩阵。)再次感谢。还有另一个更新,希望能把事情弄清楚。你的代码不能与你的输入一起运行<代码>文档版本(输入)
返回错误。只需显示预期的输出。但是,我怀疑您希望执行一个在R中称为“重塑”的操作。如果是这样,您可能会感兴趣的包重塑2。另外,您的示例输入非常适合创建“图表或其他东西”。我对R比较陌生,因此非常感谢您的帮助!这打开了我的眼睛。。。