【问题标题】:Split list into dataframe at comma delimiter在逗号分隔符处将列表拆分为数据框
【发布时间】:2019-02-19 16:17:43
【问题描述】:

这可能是重复的,但一段时间后我仍然没有找到 R 的简单、充分的答案。

我有一个列表answers,其中包含许多行中不同类型(数字、字符、字符串、日期)的逗号分隔数据。如何拆分它,以便每一行都有多个列,其中包含每个数据值?

我一直在尝试使用 strsplitseparate 函数,但没有成功。


我的当前数据如下所示:

[[2,4,6,Yes,No,ABC,date,(not asked),2018-01-04][1,3,5,No,Yes,DEF,date,|I don't know|, 2018-04-03]]

我想把它变成这样的数据框:

    V1  V2  V3  V4   V5   V6   V7     V8            V9     
1   2   4   6   Yes  No   ABC  date   (not asked)   2018-01-04

2   1   3   5   No   Yes  DEF  date   I don't know  2018-04-03  

我试过这个:

new_answers<-read.csv(text=gsub("\\,","\n", answers), # replace "," with linefeeds
         header = FALSE)

但这会将数据值垂直分离(分成超长列),而不是水平分离(分成多列的数据框)。

【问题讨论】:

  • 请使用dput 显示示例
  • 这是一个 R list 还是只是一个普通的文本文件,它是一个列表?为什么不使用read.csv

标签: r split strsplit csv


【解决方案1】:

将所有"]" 替换为换行符,并删除"[",使用read.csv 进行进程:

txt <- "[[2,4,6,Yes,No,ABC,date,(not asked),2018-01-04][1,3,5,No,Yes,DEF,date,|I don't know|, 2018-04-03]]"

read.csv(text=gsub("\\[", "",   #remove "["
                   gsub("\\]","\n", txt)), # replace "]" w/ R-lf's
           header = FALSE, col.names = LETTERS[1:9])
  A B C   D   E   F    G              H           I
1 2 4 6 Yes  No ABC date    (not asked)  2018-01-04
2 1 3 5  No Yes DEF date |I don't know|  2018-04-03

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多