首页 > 解决方案 > 如何在 R 中正确使用 read.table 与该数据库?

问题描述

我正在尝试用read.table(file="clipboard")R 读取这个虚拟数据库:

             Aspecto   Sexo      Ranking
1             Imagen   Hombre    7.50
2      Mantenimiento   Hombre    7.18
3               Otro   Hombre    7.05
4  Espacios de venta   Hombre    6.91
5         Vigilancia   Hombre    6.36
6             Tiempo   Hombre    6.51
7    Espacios libres   Hombre    6.40
8             Imagen   Mujer     7.21
9      Mantenimiento   Mujer     7.30
10              Otro   Mujer     6.90
11 Espacios de venta   Mujer     7.02
12        Vigilancia   Mujer     6.53
13            Tiempo   Mujer     6.40
14   Espacios libres   Mujer     5.78

这段代码似乎工作:

pw <- read.table(file="clipboard", dec=".", sep=",", header=TRUE)

但结构显然是我不想要的:

str(pw)
'data.frame':   14 obs. of  1 variable:
 $ Aspecto...Sexo......Ranking: Factor w/ 14 levels "1  

我尝试了很多事情fill=TRUE,包括其他论点,但我就是无法得到我所期望的。例如:

pw <- read.table(file="clipboard", dec=".", sep="", header=TRUE)
Error in read.table(file = "clipboard", dec = ".", sep = "", header = TRUE) : 
  more columns than column names

任何建议将不胜感激。

标签: rdataframeclipboardread.table

解决方案


您可以使用read.fwf, 因为列的宽度是固定的,并且字符串周围没有引号。由于第一行只有 3 个名称,我们跳过这一步,但稍后使用扫描读取它们。

clipboard <- read.fwf("clipboard.txt", widths=c(2,18,9,8), skip=1, as.is=TRUE) 
# or row.names=1 to ignore the first un-named column

colnames(clipboard)[2:4] = scan("clipboard.txt", what=rep("character", 3), nlines=1)

str(clipboard)

'data.frame':   14 obs. of  4 variables:
 $ V1     : num  1 2 3 4 5 6 7 8 9 10 ...
 $ Aspecto: chr  "            Imagen" "     Mantenimiento" "              Otro" " Espacios de venta" ...
 $ Sexo   : chr  "   Hombre" "   Hombre" "   Hombre" "   Hombre" ...
 $ Ranking: num  7.5 7.18 7.05 6.91 6.36 6.51 6.4 7.21 7.3 6.9 ...

推荐阅读