1

我正在运行的程序使用以下代码创建三个数据框:

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 命令使其工作,但似乎应该有一种更有效的方法来通过使用其中一个应用命令或类似命令来完成此操作。谢谢您的帮助。

4

2 回答 2

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")
于 2013-02-13T15:10:25.540 回答
1

一种方式,因为 evreything 似乎是一个 numeric,将是这样的:

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

基本上这是可行的,因为您的数据是矩阵而不是数据框,那么您只需要在最后更改一次名称。

于 2013-02-13T14:43:27.303 回答