RStudio 提供了一个很好的函数 View (带有大写的 V )来查看数据,但是使用 R 在大型数据集中获取方向仍然很麻烦。最常见的选项是...

  • names(df)
  • str(df)

  • 如果您来自 SPSS,那么 R 在这方面似乎是降级的。我想知道是否有更人性化的选项?我没有找到现成的,所以我想与您分享我的解决方案。

    最佳答案

    使用 RStudio 的内置函数 View ,可以很容易地为 data.frame 列出一个类似于 SPSS 中的变量列表。此函数使用变量信息创建一个新的 data.frame 并通过 View 显示在 RStudio GUI 中。

    # Better variables view
    Varlist = function(sia) {
      # Init varlist output
      varlist = data.frame(row.names = names(sia))
      varlist[["comment"]] = NA
      varlist[["type"]] = NA
      varlist[["values"]] = NA
      varlist[["NAs"]] = NA
      # Fill with meta information
      for (var in names(sia)) {
        if (!is.null(comment(sia[[var]]))) {
            varlist[[var, "comment"]] = comment(sia[[var]])
        }
        varlist[[var, "NAs"]] = sum(is.na(sia[[var]]))
        if (is.factor(sia[[var]])) {
          varlist[[var, "type"]] = "factor"
          varlist[[var, "values"]] = paste(levels(sia[[var]]), collapse=", ")
        } else if (is.character(sia[[var]])) {
          varlist[[var, "type"]] = "character"
        } else if (is.logical(sia[[var]])) {
          varlist[[var, "type"]] = "logical"
          n = sum(!is.na(sia[[var]]))
          if (n > 0) {
            varlist[[var, "values"]] = paste(round(sum(sia[[var]], na.rm=T) / n * 100), "% TRUE", sep="")
          }
        } else if (is.numeric(sia[[var]])) {
          varlist[[var, "type"]] = typeof(sia[[var]])
          n = sum(!is.na(sia[[var]]))
          if (n > 0) {
            varlist[[var, "values"]] = paste(min(sia[[var]], na.rm=T), "...", max(sia[[var]], na.rm=T))
          }
        } else {
          varlist[[var, "type"]] = typeof(sia[[var]])
        }
      }
      View(varlist)
    }
    

    我的建议是将其存储为文件(例如 Varlist.R ),无论您需要什么,只需键入:
    source("Varlist.R")
    Varlist(df)
    

    再次请注意用作函数名称的大写 V

    限制: 使用 data.frame 时,除非再次运行 Varlist(df) ,否则不会更新列表。

    注意: R 有一个内置选项可以使用 print 查看数据。如果使用纯 R,只需将 View(varlist) 替换为 print(varlist) 。然而,根据屏幕大小,Hmisc::describe() 可能是控制台的更好选择。

    关于r - RStudio(或R)中是否有像SPSS一样的变量列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40022541/

    10-12 13:02
    查看更多