【问题标题】:how to convert a list of text to a data frame in R如何将文本列表转换为R中的数据框
【发布时间】:2014-10-21 08:52:47
【问题描述】:

我有一个 csv 文件,它有点混乱,比如:

- Page 1
- Hugh
- Grant
- First Name:
- Last Name:
- Age: 54
- Movies:
- Notting Hill
- 4 Weddings & A Funeral
- Music and Lyrics
- Scarlett
- Johansson
- First Name:
- Last Name:
- Age: 29
- Movies:
- The Avengers
- Chef
- Lucy
- Page 2
- Mark
- Wahlberg
- First Name:
- Last Name:
- Age: 43
- Movies:
- Ted
- Transformers: Age of Extinction

我想把它做成如下表格:

- First Name Last Name Age Movies
- Hugh       Grant     54  Notting Hill, 4 Weddings & a Funeral, Music & Lyric
- Scarlett   Johansson 29  The Avengers, Chef, Lucy
- Mark       Wahlberg  43  Ted, Transformers: Age of Extinction

如何在 R 中创建这样的数据框?请注意,原始列表的长度约为 16000(即 16000 x 1 个数据帧)。

【问题讨论】:

  • 一个“小”混乱了?您说这是一个 CSV 文件,但您的输入没有显示分隔符。

标签: r string


【解决方案1】:

根据显示的数据,您可以尝试

 lines <- readLines("movies.txt")
 lines1 <- lines[!grepl("Page", lines)]
 indx <- grep("(First|Last|Age|Movies).*:$", lines1)
 indx1 <- grep("First.*:", lines1)
 indx2 <- grep("Movies:", lines1)

 m1 <- t(sapply(c(-1,-2, 3), function(i) lines1[indx1+i]))[c(2,1,3),]
 m2 <-  t(sapply(1:3, function(i) lines1[indx2+i]))
 m3 <- rbind(m1, m2)
 library(stringr)
 dat <- data.frame(names= c(unique(lines1[indx]),rep('-', 2)),
        matrix(str_trim(gsub("-","",  m3)), nrow=6), stringsAsFactors=FALSE)

 dat
 #         names                     X1           X2
 #1 - First Name:                   Hugh     Scarlett
 #2  - Last Name:                  Grant    Johansson
 #3        - Age:                     54           29
 #4     - Movies:           Notting Hill The Avengers
 #5             - 4 Weddings & A Funeral         Chef
 #6             -       Music and Lyrics         Lucy
  #                              X3
 #1                            Mark
 #2                        Wahlberg
 #3                              43
 #4                             Ted
 #5 Transformers: Age of Extinction
 #6                            <NA>

【讨论】:

  • 谢谢!这里有很大的帮助!
  • @alvinaloy 没问题。很高兴它有帮助。
猜你喜欢
  • 1970-01-01
  • 2020-07-29
  • 2021-11-21
  • 2021-02-07
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
相关资源
最近更新 更多