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 Colwise在ddply中读取列名_R_Plyr - Fatal编程技术网

R Colwise在ddply中读取列名

R Colwise在ddply中读取列名,r,plyr,R,Plyr,我试图通过数据帧进行分块,查找子数据帧不平衡的实例,并为缺失的某个因子的某些级别添加0值。为此,在ddply中,我对一个集合向量进行了快速比较,确定了因子的级别,然后创建了一些新行,复制子数据集的第一行,但修改了它们的值,然后将它们绑定到旧数据集 我使用colwise进行复制 这在ddply之外非常有效。在ddply的内部…识别行被吃掉,而rbind在我的。这是奇怪的行为。请参阅以下代码以及一些抛出的调试打印语句,以查看结果的差异: #a test data frame g <- data

我试图通过数据帧进行分块,查找子数据帧不平衡的实例,并为缺失的某个因子的某些级别添加0值。为此,在ddply中,我对一个集合向量进行了快速比较,确定了因子的级别,然后创建了一些新行,复制子数据集的第一行,但修改了它们的值,然后将它们绑定到旧数据集

我使用colwise进行复制

这在ddply之外非常有效。在ddply的内部…识别行被吃掉,而rbind在我的。这是奇怪的行为。请参阅以下代码以及一些抛出的调试打印语句,以查看结果的差异:

#a test data frame
g <- data.frame(a=letters[1:5], b=1:5)

#repeat rows using colwise
rep.row <- function(r, n){
  colwise(function(x) rep(x, n))(r)
}

#if I want to do this with just one row, I get all of the columns
rep.row(g[1,],5)
您可以看到此调试版本的问题

#So, what is going on here?
ddply(g, .(a), function(x) {
  newrows <- rep.row(x[1,],5)
  newrows$b<-0
  print(x)
  print("\n\n")
  print(newrows)
  rbind(x, newrows)

})

这是怎么回事?为什么在子数据帧上使用colwise时,标识行会被吃掉?

看起来,ddply和colwise之间的交互很有趣。更具体地说,当
colwise
调用
strip\u splits
并找到由
ddply
给出的
vars
属性时,就会出现问题

作为一种解决方法,尝试将此第一行放在函数中

   attr(x, "vars") <- NULL
   # your code follows
   newrows <- rep.row(x[1,],5)
attr(x,“vars”)
#So, what is going on here?
ddply(g, .(a), function(x) {
  newrows <- rep.row(x[1,],5)
  newrows$b<-0
  print(x)
  print("\n\n")
  print(newrows)
  rbind(x, newrows)

})
  a b
1 a 1
[1] "\n\n"
  b
1 0
2 0
3 0
4 0
5 0
Error in rbind(deparse.level, ...) : 
  numbers of columns of arguments do not match
   attr(x, "vars") <- NULL
   # your code follows
   newrows <- rep.row(x[1,],5)