如何读取数据

时间:2019-08-31 14:26:16

标签: r

我是r语言的新手,我想阅读以下输入内容,但不知道如何进行操作:

m n
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

我想将以下输入内容分为6类

  1. m
  2. n
  3. c(1,5,9,13)
  4. c(2,6,10,14)
  5. c(3,7,11,15)
  6. c(4,8,12,16)

我尝试了以下代码,但似乎不起作用

f <- file("stdin")
r <- file("stdin")

data1 = scan(file = r,skip = 1)
data1 <- split(data1, " ")

data2 = scan(file = f ,nlines =1)
data2 <- split(data2, " ")

o1 = data2[1]
o2 = data2[2]

似乎总是给

"Read 0 items"

data2

1 个答案:

答案 0 :(得分:3)

使用read.table两次,最后在“注释”中给出Lines

mn <- read.table(text = Lines, nrows = 1, as.is = TRUE)
DF <- read.table(text = Lines, skip = 1)

给予:

mn
##   V1 V2
## 1  m  n

mn[[1]]
## [1] "m"

mn$V1 # same
## [1] "m"


DF
##   V1 V2 V3 V4
## 1  1  2  3  4
## 2  5  6  7  8
## 3  9 10 11 12
## 4 13 14 15 16

DF[[1]]
## [1]  1  5  9 13

DF$V1   # same
## [1]  1  5  9 13

由6个组成部分组成的列表为:

unname( c(mn, DF) )
## [[1]]
## [1] "m"
## 
## [[2]]
## [1] "n"
## 
## [[3]]
## [1]  1  5  9 13
## 
## [[4]]
## [1]  2  6 10 14
## 
## [[5]]
## [1]  3  7 11 15
##
## [[6]]
## [1]  4  8 12 16

扫描

如果像问题中一样使用scan,则假定除了第一行外,所有行都具有相同数量的字段,请获取字段计数(每行一个),然后计数使用扫描使用这些数字:

counts <- count.fields(textConnection(Lines))
c( scan(text = Lines, what = "", nmax = counts[1], quiet = TRUE), 
   scan(text = Lines, what = as.list(numeric(counts[2])), skip = 1, quiet = TRUE) )
## [[1]]
## [1] "m"
## 
## [[2]]
## [1] "n"
##
## [[3]]
## [1]  1  5  9 13
## 
## [[4]]
## [1]  2  6 10 14
## 
## [[5]]
## [1]  3  7 11 15
##
## [[6]]
## [1]  4  8 12 16

注意

假设输入为:

Lines <- "m n
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16"