当在R中键入以下命令时,将创建11行和5列(变量)的数据帧。我的问题是R如何知道这个数据集中有5列?是什么阻止R从55列数据框创建1行?
谢谢!
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 ")
答案 0 :(得分: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行?因为行尾用于表示新行的开头。如果没有我们明确的干预,总是查看这个默认参数以查看发生的情况是个好主意。
答案 1 :(得分:2)
read.table
和朋友用于阅读表格数据,即可以描述为具有设定数量的行和列的输入。该函数从输入中的分隔符和换行符推断出行和列,这就是您获得11行和5列的原因。如果您有顺序输入,即只有一堆没有特定结构的元素,请使用scan
。
另一方面,您在该输入中有一个行号,这意味着您确实拥有表格数据......是吗?
答案 2 :(得分:1)
有5列和11行,所以你应该期待(毫不奇怪)。例如,如果你删除第一列1,2 ... 11,但保留其他列然后重新排列日期在一个col和另一个col上的值,那么你将有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")