2

当在 R 中输入以下命令时,将创建一个 11 行和 5 列(变量)的数据框。我的问题是 R 怎么知道这个数据集中有 5 列?是什么阻止 R 创建 1 行 x 55 列数据框?

谢谢!

d <- read.table(header=FALSE, fill=TRUE, text="
  1   2010-10-04 52495  2010-10-04 11.6  
  2   2010-10-01 53000  2010-10-01 15.3
  3   2010-09-30 52916  2010-09-30 14.3
  4   2010-09-29 52785  2010-09-29 11.3
  5   2010-09-28 53348  2010-09-28 18.2
  6   2010-09-27 52885  2010-09-24 11.7
  7   2010-09-24 52174  2010-09-23 15.0
  8   2010-09-23 51461  2010-09-22 18.6
  9   2010-09-22 51286  2010-09-20 17.9
  10  2010-09-21 50968  
  11  2010-09-20 49250  ")
4

3 回答 3

3

该函数read.table有几个参数,大部分都有默认值,所以你不需要指定它们。特别是,有参数sep,默认情况下是""。这个参数是识别列数的神奇参数。如果您将代码更改为:

data.txt="
  1   2010-10-04 52495  2010-10-04 11.6  
  2   2010-10-01 53000  2010-10-01 15.3
  3   2010-09-30 52916  2010-09-30 14.3
  4   2010-09-29 52785  2010-09-29 11.3
  5   2010-09-28 53348  2010-09-28 18.2
  6   2010-09-27 52885  2010-09-24 11.7
  7   2010-09-24 52174  2010-09-23 15.0
  8   2010-09-23 51461  2010-09-22 18.6
  9   2010-09-22 51286  2010-09-20 17.9
  10  2010-09-21 50968  
  11  2010-09-20 49250  "

# reading the same data with different sep values
d0 <- read.table(header=FALSE, fill=TRUE, text=data.txt)
d1 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep="")
d2 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep=",")
d3 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep=";")
d4 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep="-")
d5 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep="0")
d6 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep=".")

# aggregatting all data frames
d = list(d0=d0, d1=d1, d2=d2, d3=d3, d4=d4, d5=d5, d6=d6)
dims.d = sapply(d, dim) # get the dimension of all dataframes
rownames(dims.d) = c("nrow", "ncol")
print(dims.d)

     d0 d1 d2 d3 d4 d5 d6
nrow 11 11 11 11 11 11 11
ncol  5  5  1  1  5 12  2

现在您看到数据的读取方式有所不同。所有 5 列的数据框都完全不同,但前两个(你可以检查)。为什么总是有 11 行?因为行尾用于指示新行的开始。在没有我们明确干预的情况下,始终查看此默认参数以查看正在发生的事情是一个好主意。

于 2013-06-29T18:17:38.870 回答
2

read.table和朋友是用于读取表格数据,即可以描述为具有一定数量的行和列的输入。该函数从输入中的分隔符和换行符推断行和列,这就是为什么你得到 11 行和 5 列的原因。如果您有顺序输入,即只有一堆没有特定结构的元素,请使用scan.

另一方面,您在该输入中有一个行号,这意味着您确实有表格数据......是吗?

于 2013-06-29T17:32:41.380 回答
1

有 5 列和 11 行,所以你应该预料到这一点(不足为奇)。例如,如果你删除了 1,2...11 的第一列,但保留了其他列,然后在一个列和值上重新排列日期在另一个列上,那么您将有 20 行和 2 列。

d <- read.table(header=FALSE, fill=TRUE, text="
          2010-10-04 52495   
          2010-10-01 53000  
          2010-09-30 52916  
          2010-09-29 52785  
          2010-09-28 53348  
          2010-09-27 52885  
          2010-09-24 52174  
          2010-09-23 51461  
          2010-09-22 51286  
          2010-09-21 50968  
          2010-09-20 49250
          2010-10-04 11.6
          2010-10-01 15.3 
          2010-09-30 14.3 
          2010-09-29 11.3 
          2010-09-28 18.2
          2010-09-24 11.7
          2010-09-23 15.0
          2010-09-22 18.6
          2010-09-20 17.9")

如果要创建 1 行乘 43 列,则需要将所有日期和值放在一行中(在脚本文件中)。像这样:

d <- read.table(header=FALSE, fill=TRUE, text="2010-10-04 52495 2010-10-01 53000 2010 09 30 52916 2010-09-29 52785 2010-09-28 53348 2010-9-27 52885 2010-09-24 52174 2010-09-23 51461  2010-09-22 51286  2010-09-21 50968 2010-09-20 49250 2010-10-04 11.6 2010-10-01 15.3 2010-09-30 14.3 2010-09-29 11.3 2010-09-28 18.2 2010-09-24 11. 2010-09-23 15.0 2010-09-22 18.6 2010-09-20 17.9")

对于 2 行乘 32 列,在脚本中放入 2 行。像这样的东西:

d <- read.table(header=FALSE, fill=TRUE, text="2010-10-04 52495 2010-10-01 53000 2010 09 30 52916 2010-09-29 52785 2010-09-28 53348 2010-9-27 52885 2010-09-24 52174 2010-09-23 51461  2010-09-22 51286  2010-09-21 50968 2010-09-20 49250 2010-10-04 11.6 2010-10-01 15.3 2010-09-30 14.3 2010-09-29 11.3
                2010-09-28 18.2 2010-09-24 11. 2010-09-23 15.0 2010-09-22 18.6 2010-09-20 17.9")
于 2013-06-29T17:23:45.097 回答