繁体   English   中英

CSV标称值在R中的错误识别

[英]CSV nominal values' wrong recognition in R

我在MS Access中将数字声明为文本(即标称)。 这些数字表示原本可能是长句子的简化版本。

我目前尝试通过以下三种方式将文件导出为csv

  1. MS Access的本机csv功能
  2. MS Excel的本机csv函数(来自MS Access)
  3. LibreOffice Calc的“使用文本CSV格式”; 我什至选中“ Quote all text cell”(报价所有文本单元格)选项,以确保照顾到所有标称值。

当我尝试使用summary(data)时,问题出在R中,即使这些值用双引号或单引号引起来,它们仍被解释为数字。 我确信这一点,因为我看到这些变量在summary函数中给出了均值,中位数和其他变量,而这些变量与带有以频率显示的字符的变量相比。

在下面的示例中, var1var2都是标称值,其中后者由数字表示(请注意var2结果的值出于安全性而更改)。

var1            var2
Cat  : 111   Min.   :1   
Dog  : 222   1st Qu.:1   
Bee  : 333   Median :8   
Yog  : 555   Mean   :10   
Fig  : 999   3rd Qu.:1
Kol  : 444   Max.   :15                                      
(Other):2250

我已经考虑过在这些数字标称值后附加一个字符(而不是1, 2, 3, 4, 5我将拥有1a, 2a, 3a, 4a, 5a ),以确保将这些字符解释为标称值,但在完成这项艰巨的任务之前,我希望在这里找到一个新的解决方案。

read.table和family具有colClasses参数。

请参阅以下示例,以查看使用不同colClasses时结果的差异:

样本数据

text <- c("A,B,C", "1,2,3", "2,1,4")

默认read.csv

A <- read.csv(text = text)
str(A)
# 'data.frame':  2 obs. of  3 variables:
#  $ A: int  1 2
#  $ B: int  2 1
#  $ C: int  3 4
summary(A)
#       A              B              C       
# Min.   :1.00   Min.   :1.00   Min.   :3.00  
# 1st Qu.:1.25   1st Qu.:1.25   1st Qu.:3.25  
# Median :1.50   Median :1.50   Median :3.50  
# Mean   :1.50   Mean   :1.50   Mean   :3.50  
# 3rd Qu.:1.75   3rd Qu.:1.75   3rd Qu.:3.75  
# Max.   :2.00   Max.   :2.00   Max.   :4.00  

character读取数据

B <- read.csv(text = text, colClasses = "character")
str(B)
# 'data.frame': 2 obs. of  3 variables:
#  $ A: chr  "1" "2"
#  $ B: chr  "2" "1"
#  $ C: chr  "3" "4"
summary(B)
#     A                  B                  C            
# Length:2           Length:2           Length:2          
# Class :character   Class :character   Class :character  
# Mode  :character   Mode  :character   Mode  :character  

读取数据作为factor

C <- read.csv(text = text, colClasses = "factor")
str(C)
# 'data.frame': 2 obs. of  3 variables:
#  $ A: Factor w/ 2 levels "1","2": 1 2
#  $ B: Factor w/ 2 levels "1","2": 2 1
#  $ C: Factor w/ 2 levels "3","4": 1 2
summary(C)
#   A     B     C    
# 1:1   1:1   3:1  
# 2:1   2:1   4:1

colClasses参数接受vector ,因此您可以逐列指定值应为:

D <- read.csv(text = text1, colClasses = c("integer", "character", "factor"))

str(D)
# 'data.frame':  2 obs. of  3 variables:
#  $ A: int  1 2
#  $ B: chr  "2" "1"
#  $ C: Factor w/ 2 levels "3","4": 1 2
summary(D)
#        A             B             C    
#  Min.   :1.00   Length:2           3:1  
#  1st Qu.:1.25   Class :character   4:1  
#  Median :1.50   Mode  :character        
#  Mean   :1.50                           
#  3rd Qu.:1.75                           
#  Max.   :2.00                           

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM