我正在运行的程序使用以下代码创建三个数据框:
datuniqueNDC <- data.frame(lapply(datlist, function(x) length(unique(x$NDC))))
datuniquePID <- data.frame(lapply(datlist, function(x) length(unique(x$PAYERID)))
datlengthNDC <- data.frame(lapply(datlist, function(x) length(x$NDC)))
他们的输出看起来像这样:
X182L X178L X76L
1 182 178 76
X34L X31L X7L
1 34 31 7
X10674L X10021L X653L
1 10674 10021 653
我要做的是将行组合在一起形成一个数据框,其结果是:
X Y Z
1 182 178 76
2 34 31 7
3 10674 10021 653
但由于所有列的名称不同,rbind命令不起作用。我可以在创建上面的每个变量之后使用colnames命令使它工作,但似乎应该有一种更有效的方法来通过使用apply命令之一或类似的方法来实现这一点。谢谢你的帮助。
答案 0 :(得分:1)
单向,因为evreything似乎是一个数字,就是这样:
mylist <- list(dat1,dat2,dat3)
# assuming your three data.frames are dat1:dat3 respectively
do.call("rbind",lapply(mylist, as.matrix))
# X182L X178L X76L
#[1,] 182 178 76
#[2,] 34 31 7
#[3,] 10674 10021 653
基本上这是有效的,因为你的数据是矩阵而不是数据帧,那么你只需要在最后更改一次名称。
答案 1 :(得分:1)
由于您在lapply
次调用中使用的功能是标量,因此使用sapply
会更容易。 sapply
会返回您可以rbind
datuniqueNDC <- sapply(datlist, function(x) length(unique(x$NDC)))
datuniquePID <- sapply(datlist, function(x) length(unique(x$PAYERID))
datlengthNDC <- sapply(datlist, function(x) length(x$NDC))
dat <- as.data.frame(rbind(datuniqueNDC,datuniquePID,datlengthNDC))
names(dat) <- c("x", "y", "z")
另一个解决方案是在一个函数中计算所有三个统计信息:
dat <- as.data.frame(sapply(datlist, function(x) {
c(length(unique(x$NDC)), length(unique(x$PAYERID), length(x$NDC))
}))
names(dat) <- c("x", "y", "z")