您可以使用它scan
来读取多行数据,尤其是因为它是一种特定格式。
dat <- data.frame(scan("data.txt",
what = as.list(c("character","character","number","number",
"character","number","character",
rep("character",24))),
multi.line=TRUE))
names(dat) <- paste("V",1:ncol(dat),sep="")
这使
> dat
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16
1 04001400 HI 34.50 118.27 19480701 08 LST 0 0 0 0 0 0 0 0 0
2 04001400 HI 34.50 118.27 19480801 08 LST 0 0 0 0 0 0 0 0 0
3 04001400 HI 34.50 118.27 19480901 08 LST 0 0 0 0 0 0 0 0 0
V17 V18 V19 V20 V21 V22 V23 V24 V25 V26 V27 V28 V29 V30 V31
1 0 0 0 MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS
2 0 0 0 MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS
3 0 0 0 MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS
> dim(dat)
[1] 3 31
当然,您可以为列提供更多信息的名称。
编辑:
正如 Josh 在评论中指出的那样,我的what
论点格式错误,导致所有列都作为字符导入,而不是一些作为字符和一些作为数字导入。它应该是:
dat <- data.frame(scan("data.txt",
what = list(character(), character(), numeric(), numeric(),
character(), numeric(), character(),
character(), character(), character(), character(),
character(), character(), character(), character(),
character(), character(), character(), character(),
character(), character(), character(), character(),
character(), character(), character(), character(),
character(), character(), character(), character()),
multi.line=TRUE))
names(dat) <- paste("V",1:ncol(dat),sep="")
这给出了更合适的:
> str(dat)
'data.frame': 3 obs. of 31 variables:
$ V1 : Factor w/ 1 level "04001400": 1 1 1
$ V2 : Factor w/ 1 level "HI": 1 1 1
$ V3 : num 34.5 34.5 34.5
$ V4 : num 118 118 118
$ V5 : Factor w/ 3 levels "19480701","19480801",..: 1 2 3
$ V6 : num 8 8 8
$ V7 : Factor w/ 1 level "LST": 1 1 1
$ V8 : Factor w/ 1 level "0": 1 1 1
$ V9 : Factor w/ 1 level "0": 1 1 1
$ V10: Factor w/ 1 level "0": 1 1 1
$ V11: Factor w/ 1 level "0": 1 1 1
$ V12: Factor w/ 1 level "0": 1 1 1
$ V13: Factor w/ 1 level "0": 1 1 1
$ V14: Factor w/ 1 level "0": 1 1 1
$ V15: Factor w/ 1 level "0": 1 1 1
$ V16: Factor w/ 1 level "0": 1 1 1
$ V17: Factor w/ 1 level "0": 1 1 1
$ V18: Factor w/ 1 level "0": 1 1 1
$ V19: Factor w/ 1 level "0": 1 1 1
$ V20: Factor w/ 1 level "MIS": 1 1 1
$ V21: Factor w/ 1 level "MIS": 1 1 1
$ V22: Factor w/ 1 level "MIS": 1 1 1
$ V23: Factor w/ 1 level "MIS": 1 1 1
$ V24: Factor w/ 1 level "MIS": 1 1 1
$ V25: Factor w/ 1 level "MIS": 1 1 1
$ V26: Factor w/ 1 level "MIS": 1 1 1
$ V27: Factor w/ 1 level "MIS": 1 1 1
$ V28: Factor w/ 1 level "MIS": 1 1 1
$ V29: Factor w/ 1 level "MIS": 1 1 1
$ V30: Factor w/ 1 level "MIS": 1 1 1
$ V31: Factor w/ 1 level "MIS": 1 1 1