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