在控制台输出中显示标签

时间:2016-03-06 07:20:06

标签: r console dataframe label dplyr

我正在使用带标签的数据框。

library(dplyr)
library(sjmisc)
library(ggplot2)
data("diamonds")

df= tbl_df(diamonds) %>%
  select(cut, carat, price) %>%
  set_label(c("", "Kt", "EUR")) %>%
  slice(1:3)

在R-Studio中,数据框视图看起来应该是:

enter image description here

df打印到控制台时,dplyr包会将tbl_df对象重新格式化为:

Source: local data frame [3 x 3]

      cut carat price
   (fctr) (dbl) (int)
1   Ideal  0.23   326
2 Premium  0.21   326
3    Good  0.23   327

因此,使用此默认设置标签会丢失(不在数据框中,而是比较R-Studio视图和控制台)。

我正在寻找一个提供以下控制台输出的功能(根据标签交换类信息,并可选择跳过源信息):

      cut carat price
       ()  (Kt) (EUR)
1   Ideal  0.23   326
2 Premium  0.21   326
3    Good  0.23   327

1 个答案:

答案 0 :(得分:1)

这是一个快速实施。我可以将它添加到我的sjmisc包中,如果结果证明是有用的。

print.lbl_df <- function(x, n = NULL, width = NULL) {
  # get labels
  dlab <- sjmisc::get_label(x)
  # if x of class tbl_df?
  if (!"tbl_df" %in% class(x))
    x <- dplyr::tbl_df(x)
  # get df matrix
  dmat <- dplyr::trunc_mat(x, n = n, width = width)
  # set labels
  for (i in 1:ncol(dmat[[1]])) {
    # replace first value of each column, which is the class description
    # with variable label
    dmat[[1]][[i]][1] <- dlab[i]
  }
  # use dplyr-print method now
  print(dmat, n = n, width = width)
}

lbl_df <- function(x) {
  # add class attribute, if necessary
  if(!"lbl_df" %in% class(x))
    class(x) <- c("lbl_df", class(x))
  x
}

library(dplyr)
library(sjmisc)
library(ggplot2)
data("diamonds")

mydf <- lbl_df(tbl_df(diamonds) %>%
  select(cut, carat, price) %>%
  set_label(c("", "Kt", "EUR")) %>%
  slice(1:3))

mydf

>       cut carat price
>              Kt   EUR
> 1   Ideal  0.23   326
> 2 Premium  0.21   326
> 3    Good  0.23   327

修改:我已经在我的sjmisc-package中添加了lbl_df方法和通用print方法,我今晚将提交更改。如果您愿意,可以安装最新版本from GitHub