我在MS Access中将数字声明为文本(名义上为a.k.a.)。这些数字代表了可能长句作为类别的简化版本。
我目前尝试以三种方式将文件导出为csv
:
csv
功能csv
功能(来自MS Access)当我尝试使用summary(data)
并且看到这些数字 - 名义值仍被解释为数字时,问题出在R中,即使这些值用双引号或单引号括起来。我确信这一点,因为我看到这些变量(在summary
函数中)给出了均值,中位数和其他变量与具有频率的字符进行比较。
在下面的示例中,var1
和var2
都是名义上的,其中后者由数字表示(请注意,为了安全起见,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
)以确保将这些字符解释为名义值,但我希望在进行那项艰巨的任务之前,这里有一个新的解决方案。
答案 0 :(得分:1)
read.table
和家人有一个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