用值填充data.frame。如何加快这一进程?
我当前正在尝试用另一个data.frame中的值填充空data.frame。首先,我用相应的维度初始化一个空的data.frame,然后使用for循环用另一个data.frame中包含的值填充这个data.frame。有没有一种方法可以使用apply type函数来加速该过程 提前感谢,, 本尔 更新2:修复了示例用值填充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
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比较陌生,因此非常感谢您的帮助!这打开了我的眼睛。。。