Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/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 - Fatal编程技术网

R 取消堆叠堆叠的数据框会以不同的顺序取消堆叠列

R 取消堆叠堆叠的数据框会以不同的顺序取消堆叠列,r,R,使用R3.1.0 a = as.data.frame(do.call(cbind, lapply(1:100, function(x) { c(1,2,3)}))) b = unstack(stack(a)) # Returns FALSE all(colnames(a) == colnames(b)) 有关堆栈/取消堆栈的文档说,取消堆栈应“反转此[堆栈]操作”。我错过什么了吗?为什么我需要对b列重新排序?你永远不会让我为R文档辩护 stack(…)创建一个包含两列的新数据框,values和

使用R3.1.0

a = as.data.frame(do.call(cbind, lapply(1:100, function(x) { c(1,2,3)})))
b = unstack(stack(a))
# Returns FALSE
all(colnames(a) == colnames(b))

有关堆栈/取消堆栈的文档说,取消堆栈应“反转此[堆栈]操作”。我错过什么了吗?为什么我需要对b列重新排序?

你永远不会让我为R文档辩护

stack(…)
创建一个包含两列的新数据框,
values
ind
。后者将原始表中的列名作为一个因子按字母顺序排列
unstack(…)
使用该因子(重新)创建新数据框的列。所以“拆垛逆转了这一操作”这句话应该粗略地解释

要获得所需的结果,需要按如下方式重新排列系数
ind

a     <- as.data.frame(do.call(cbind, lapply(1:100, function(x) { c(1,2,3)})))
c     <- stack(a)
c$ind <- factor(c$ind, levels=colnames(a))
d     <- unstack(c)
identical(a,d)
# [1] TRUE

a你永远不会让我为R文档辩护

stack(…)
创建一个包含两列的新数据框,
values
ind
。后者将原始表中的列名作为一个因子按字母顺序排列
unstack(…)
使用该因子(重新)创建新数据框的列。所以“拆垛逆转了这一操作”这句话应该粗略地解释

要获得所需的结果,需要按如下方式重新排列系数
ind

a     <- as.data.frame(do.call(cbind, lapply(1:100, function(x) { c(1,2,3)})))
c     <- stack(a)
c$ind <- factor(c$ind, levels=colnames(a))
d     <- unstack(c)
identical(a,d)
# [1] TRUE

a你永远不会让我为R文档辩护

stack(…)
创建一个包含两列的新数据框,
values
ind
。后者将原始表中的列名作为一个因子按字母顺序排列
unstack(…)
使用该因子(重新)创建新数据框的列。所以“拆垛逆转了这一操作”这句话应该粗略地解释

要获得所需的结果,需要按如下方式重新排列系数
ind

a     <- as.data.frame(do.call(cbind, lapply(1:100, function(x) { c(1,2,3)})))
c     <- stack(a)
c$ind <- factor(c$ind, levels=colnames(a))
d     <- unstack(c)
identical(a,d)
# [1] TRUE

a你永远不会让我为R文档辩护

stack(…)
创建一个包含两列的新数据框,
values
ind
。后者将原始表中的列名作为一个因子按字母顺序排列
unstack(…)
使用该因子(重新)创建新数据框的列。所以“拆垛逆转了这一操作”这句话应该粗略地解释

要获得所需的结果,需要按如下方式重新排列系数
ind

a     <- as.data.frame(do.call(cbind, lapply(1:100, function(x) { c(1,2,3)})))
c     <- stack(a)
c$ind <- factor(c$ind, levels=colnames(a))
d     <- unstack(c)
identical(a,d)
# [1] TRUE

a堆栈的最后几行
(请参见
utils:::stack.data.frame
)函数创建一个包含两列“value”和“ind”的
data.frame
。“ind”列使用以下代码创建:

ind = factor(rep.int(names(x), lapply(x, length)))
但是,看看
因子
通常是如何工作的(注意“级别”的顺序):


如果您描述的功能对您的分析很重要,您最好修改
stack.data.frame
的版本,以便在分解过程中捕获
data.frame
名称的顺序,如下所示:

Stack <- function (x, select, ...) 
{
  if (!missing(select)) {
    nl <- as.list(1L:ncol(x))
    names(nl) <- names(x)
    vars <- eval(substitute(select), nl, parent.frame())
    x <- x[, vars, drop = FALSE]
  }
  keep <- unlist(lapply(x, is.vector))
  if (!sum(keep)) 
    stop("no vector columns were selected")
  if (!all(keep)) 
    warning("non-vector columns will be ignored")
  x <- x[, keep, drop = FALSE]
  data.frame(values = unlist(unname(x)), 
# REMOVE THIS -->  ind = factor(rep.int(names(x), lapply(x, length))), 
# AND ADD THIS:
      ind = factor(rep.int(names(x), lapply(x, length)), unique(names(x))),
      stringsAsFactors = FALSE)
}

stack
(请参见
utils:::stack.data.frame
)函数的最后几行创建了一个
data.frame
,其中包含两列“value”和“ind”。“ind”列使用以下代码创建:

ind = factor(rep.int(names(x), lapply(x, length)))
但是,看看
因子
通常是如何工作的(注意“级别”的顺序):


如果您描述的功能对您的分析很重要,您最好修改
stack.data.frame
的版本,以便在分解过程中捕获
data.frame
名称的顺序,如下所示:

Stack <- function (x, select, ...) 
{
  if (!missing(select)) {
    nl <- as.list(1L:ncol(x))
    names(nl) <- names(x)
    vars <- eval(substitute(select), nl, parent.frame())
    x <- x[, vars, drop = FALSE]
  }
  keep <- unlist(lapply(x, is.vector))
  if (!sum(keep)) 
    stop("no vector columns were selected")
  if (!all(keep)) 
    warning("non-vector columns will be ignored")
  x <- x[, keep, drop = FALSE]
  data.frame(values = unlist(unname(x)), 
# REMOVE THIS -->  ind = factor(rep.int(names(x), lapply(x, length))), 
# AND ADD THIS:
      ind = factor(rep.int(names(x), lapply(x, length)), unique(names(x))),
      stringsAsFactors = FALSE)
}

stack
(请参见
utils:::stack.data.frame
)函数的最后几行创建了一个
data.frame
,其中包含两列“value”和“ind”。“ind”列使用以下代码创建:

ind = factor(rep.int(names(x), lapply(x, length)))
但是,看看
因子
通常是如何工作的(注意“级别”的顺序):


如果您描述的功能对您的分析很重要,您最好修改
stack.data.frame
的版本,以便在分解过程中捕获
data.frame
名称的顺序,如下所示:

Stack <- function (x, select, ...) 
{
  if (!missing(select)) {
    nl <- as.list(1L:ncol(x))
    names(nl) <- names(x)
    vars <- eval(substitute(select), nl, parent.frame())
    x <- x[, vars, drop = FALSE]
  }
  keep <- unlist(lapply(x, is.vector))
  if (!sum(keep)) 
    stop("no vector columns were selected")
  if (!all(keep)) 
    warning("non-vector columns will be ignored")
  x <- x[, keep, drop = FALSE]
  data.frame(values = unlist(unname(x)), 
# REMOVE THIS -->  ind = factor(rep.int(names(x), lapply(x, length))), 
# AND ADD THIS:
      ind = factor(rep.int(names(x), lapply(x, length)), unique(names(x))),
      stringsAsFactors = FALSE)
}

stack
(请参见
utils:::stack.data.frame
)函数的最后几行创建了一个
data.frame
,其中包含两列“value”和“ind”。“ind”列使用以下代码创建:

ind = factor(rep.int(names(x), lapply(x, length)))
但是,看看
因子
通常是如何工作的(注意“级别”的顺序):


如果您描述的功能对您的分析很重要,您最好修改
stack.data.frame
的版本,以便在分解过程中捕获
data.frame
名称的顺序,如下所示:

Stack <- function (x, select, ...) 
{
  if (!missing(select)) {
    nl <- as.list(1L:ncol(x))
    names(nl) <- names(x)
    vars <- eval(substitute(select), nl, parent.frame())
    x <- x[, vars, drop = FALSE]
  }
  keep <- unlist(lapply(x, is.vector))
  if (!sum(keep)) 
    stop("no vector columns were selected")
  if (!all(keep)) 
    warning("non-vector columns will be ignored")
  x <- x[, keep, drop = FALSE]
  data.frame(values = unlist(unname(x)), 
# REMOVE THIS -->  ind = factor(rep.int(names(x), lapply(x, length))), 
# AND ADD THIS:
      ind = factor(rep.int(names(x), lapply(x, length)), unique(names(x))),
      stringsAsFactors = FALSE)
}