在r中更改多个数据框列标题

时间:2013-02-13 14:28:43

标签: r dataframe names

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

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命令之一或类似的方法来实现这一点。谢谢你的帮助。

2 个答案:

答案 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")