首页 > 解决方案 > Summary 和 str 没有给出数据框的因子和级别信息

问题描述

我是 R(4.0.3 版)编程的新手。每当我使用函数str()summary()获取具有数字和字符的数据框的信息时,它不会在字符的输出中显示“因素”和“级别”信息。它只显示长度、类和模式信息。如何在输出中获取因子和水平信息?

标签: r

解决方案


我相信你关心的变量仍然是"character"格式。您可以使用as.factor将其转换为"factor"格式。例子:

dat1 <- data.frame(num=1:10,
                   chr=letters[1:10])

str(dat1)
# 'data.frame': 10 obs. of  2 variables:
# $ num: int  1 2 3 4 5 6 7 8 9 10
# $ chr: chr  "a" "b" "c" "d" ...

summary(dat1)
# num            chr           
# Min.   : 1.00   Length:10         
# 1st Qu.: 3.25   Class :character  
# Median : 5.50   Mode  :character  
# Mean   : 5.50                     
# 3rd Qu.: 7.75                     
# Max.   :10.00    

dat1$fac <- as.factor(dat1$chr)

str(dat1)
# 'data.frame': 10 obs. of  3 variables:
# $ num: int  1 2 3 4 5 6 7 8 9 10
# $ chr: chr  "a" "b" "c" "d" ...
# $ fac: Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10

summary(dat1)
#      num            chr                 fac   
# Min.   : 1.00   Length:10          a      :1  
# 1st Qu.: 3.25   Class :character   b      :1  
# Median : 5.50   Mode  :character   c      :1  
# Mean   : 5.50                      d      :1  
# 3rd Qu.: 7.75                      e      :1  
# Max.   :10.00                      f      :1  
#                                    (Other):4  

在 R 4.0.x 中,data.frame()其他函数stringsAsFactors=FALSE默认使用,而TRUE之前是这样。可能您的同事使用的是早期版本,因此您的结果不同?使用stringsAsFactors=TRUE产生因子。然而,新的变体相当受欢迎。

dat2 <- data.frame(num=1:10,
                   chr=letters[1:10],
                   stringsAsFactors=TRUE)

str(dat2)
# 'data.frame': 10 obs. of  2 variables:
# $ num: int  1 2 3 4 5 6 7 8 9 10
# $ chr: Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10

编辑

read.csv还有一个stringsAsFactors=参数,我们可以设置为TRUE. 例子:

dat3 <- data.frame(num=1:10, chr=letters[1:10])

class(dat3$chr)
# [1] "character"

write.csv(dat1, "dat1.csv")  ## store a .csv

dat4 <- read.csv("dat1.csv", stringsAsFactors=TRUE)  ## read in

class(dat4$chr)
# [1] "factor"

推荐阅读