【问题标题】:how do you convert output from readLines to data frame in R如何将 readLines 的输出转换为 R 中的数据帧
【发布时间】:2015-11-28 04:37:40
【问题描述】:

我有一个包含多行的 txt 文件。每一行都是以空格分隔的文本。每行中的列数可能不同。我需要一次读取每一行,将其放入数据框中并打印。

我试过这个:

x<-readLines("output.txt")


for (i in 2:length(x) ) {
  data<-data.frame(x[[i]])
  print(data)
}

我必须从第 2 行开始,因为第 1 行有一些我不需要的标题信息。

例如,这会打印出如下内容:

x[[2]]
[1] "                              dcserver        AIX      2254438400       587317248   026.05   93752=100.00  HDS93752_VMAX1561_RAID1=100.00 "

当我这样做时:

data<-data.frame(x[[2]])

我明白了:

dput(data)

structure(list(x..2.. = structure(1L, .Label = "                              dcserver        AIX      2254438400       587317248   026.05   93752=100.00  HDS93752_VMAX1561_RAID1=100.00 ", class = "factor")), .Names = "x..2..", row.names = c(NA, 
-1L), class = "data.frame")

看起来我有一行一列,我需要有 7 列,如下所示:

dcserver        AIX      2254438400       587317248   026.05   93752=100.00  HDS93752_VMAX1561_RAID1=100.00

有什么想法吗?

【问题讨论】:

  • 您能否详细说明您所期望的“每行中的列数[不同]”会出现什么样的情况,或者代码应该能够处理什么?
  • @mkemp6,一行可以有5列用空格分隔,另一行8列等等。我需要读取每一行,转换为数据框并打印出来。我需要对文件中的每一行执行此操作。列由空格分隔,但可能是多个空格等。不一致,所以我必须考虑到这一点。

标签: r


【解决方案1】:

您可以使用以下函数:textConnectionread.table

x<-readLines("output.txt")

for (i in 2:length(x) ) {
  data<-read.table(textConnection(x[[i]]))
  print(data)
}

【讨论】:

    【解决方案2】:

    我确信有更好的方法,但我已经尝试过,它对我有用:

    x<-readLines("output1.txt")
    
    for (i in 2:length(x) ) {
      x<-data.frame(x[[i]])
      writeLines(x[[i]],"test.csv")
      data<-read.csv("test.csv", header=F, sep=" ")
      df<-data[,colSums(is.na(data)) == 0]
      print(df)
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-31
      • 1970-01-01
      • 2017-10-19
      • 2022-01-13
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      相关资源
      最近更新 更多