在R中读取没有特定格式的文本文件

时间:2015-04-10 06:45:57

标签: r

我想读一个在R中具有可变列数的文本文件。 我的文本文件如下所示。我想读入一个数据框,我可以在第一行访问各行,df 1,第二行df [2],依此类推。

a       09
abandon*        12      16      19      20      24
abort*  60      61      62
about   10
above   10      41      42
abrupt* 37
absolut*        26
abuse*  12      16      18
abusive 12      16      18
academi*        47      48
accept  08      12      13      15      20      22      39
accepta*        08      12      13      15
accepted        08      12      13      15      20      38

我试过以下

read.table("myfile",header=T,sep=" ")

但是这会插入制表符。

我也试过readLines

singleString = readLines("myfile")

但这也插入\ t字符。

编辑 :(感谢Dominic Comtois到目前为止的帮助,我已经开始工作,但仍然不知道出了什么问题)

  1. 最初左边的单词和右边的数字是由制表符分隔的,而不是空格。所以R无法正确阅读

      

    df = read.table(' filename',sep =" |")   df $ V1 = as.character(df $ V1)   df 1,"V1"" a \ t09"

  2. 所以我使用命令在vi编辑器中用空格替换了制表符 :1,$ s / \ t / / g

  3. 然后我可以使用df = read.table(' filename',sep =" |")在R中读取它,但某些行看起来像这样 (令人惊讶的是,当我现在阅读文件时,很多撇号都消失了。第一个单词拼写为 aren' ,而不是不是

      

    df 123," 不是 07 39 \ nargu 12 16 18 31 32 \ narm 60 61 \ narms 60 61 \ narmy 31 \ naround 10 41 \ narous 12 60 61 \ narrange 20 \ narrive 39 46 \ narrived 46 \ narrives 39 46 \ narriving 46 \ narrogan 12 16 18 \ narse 60 61 66 \ narses 66 \ narsehole 66 \ narter 60 61 \ narthr 60 61 \ nas 10 \ nasham 12 16 \ nashes 57 59 \ nask 27 29 31 32 39 \ nasked 27 29 31 32 38 \ nnking 27 29 31 32 \ nasks 27 29 31 32 39 \ nasleep 60 64 \ nass 60 61 66 \ nassault 12 16 18 \ nassembl 31 \ nasses 66 \ nasshole 66 \ nassociatio 47 49 \ nassum 20 21 \ nassur 12 13 15 26 \ nasthma 60 61 \ nat 10 \ nate 27 38 60 63 \ natop 10 41 42 \ nattachment 12 13 14 \ nattract 12 13 \ nauditorium 47 48 \ nggust 37 \ naunt 31 35 \ nautumn 37 \ naversi 12 16 17 \ navoid 12 16 20 24 \ nawake 60 64 \ naward 12 13 15 47 50 \ naware 20 22 \ naway 10 \ nawesome 12 13 \ nawful 12 16 \ nbabe 31 36 \ nbabies 31 36 \ nbaby 31 36 \ nbad 12 16 \ nband 31 51 55 \ nbank 56 \ nbar 60 63 \ n障碍20 24 \ nbars 60 63 \ nbaseball 47 48 51 53 \ nbases 20 21 \ nbasis 20 21 \ nbasketball 47 48 51 53 \ nbastard 12 16 18 66 \ nbath 51 52 60 65 \ nbe 40 \ nbeaten 12 16 18 47 50 \ nbeaut 12 13 \ nbecame 20 22 38 \ n因为20 21 \ n成为20 39 \ n成人20 39 \ nbecoming 20 \ nbed 51 52 64 \ nbeen 38 \ nbeer 60 63 \ nbeforefore 10 37 \ nbeg 31 32 39 \ nbegan 37 38 \ n \ n 31 31 32 38 31 32 32 32 33 39 39 39 39 39 39 39 39 39 39 39 39 39 33 33 33 33 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 10 41 43 \ nbeneath 10 41 43 \ nbenefit 12 13 39 \ nbenefits 12 13 47 49 \ nbenign 12 13 \ nbeside 10 41 \ nbesides 45 \ nbest 12 13 15 47 50 \ nbet 25 39 56 \ nbets 25 39 56 \ nbetter 12 13 47 50 \ nbetting 25 56 \ n介于10 41 \ nbewilder 12 16 17 \ nbi 60 62 \ nbible 57 58 \ nbicyc 51 53 \ nbig 41 \ nbillion 11 \ nbinge 60 61 63 \ nbiology 47 48 \ nbitch 12 16 18 66 \ nbitter 12 16 1 8 27 \ nbladder 60 61 \ nblam 12 16 18 31 32 \ nbleed 60 61 \ nbless 12 13 57 58 \ nblock 20 24 \ nblood 60 61 \ nboard 47 49 \ nboarder 41 \ nbodi 60 61 \ nbody 60 61 \ nbold 12 13 15 \ nbone 60 61 \ nbonus 47 49 \ nboobs 60 61 62 66 \ nbook 47 48 \ nbore 12 16 \ nboring 12 16 \ nborrow 56 \ nboss 47 49 \ nbother 12 16 \ nbottom 41 43 \ nbought 38 56 \ nbowel 60 61 \ nboy 31 36 \ nboy 31 36"

  4. 所以我把它们写成了一个新文件

    write.table(DF [grep的(" \ n",DF $ V1)," V1&#34],'换行符&#39)

    < / LI>
  5. 但是由于我们正在编写这么多行,所以它会放置&#34;&#34;后 每一套。所以我搜索并替换了#34;人物角色 空的,基本上是删除它们

  6. 然后我使用原始的commamnd打开它们,它工作, 一切都在它的独立行

    df = read.table(&#39; newlines&#39;,sep =&#34; |&#34;)      df $ V1 = as.character(df $ V1)

  7. 我在十六进制编辑器中用空格替换制表符后也打开了文件,并没有看到任何特殊的东西。 这是问题开始之前的一行中的部分

    area  41
    aren't  07  39
    argu  12  16  18  31  32
    arm  60  61
    

    对应的十六进制

    61 72 65 61 20 20 34 31 0A 61 72 65 6E 27 74 20 20 30 37 20 20 33 39 0A 61 72 67 75 20 20 31 32 20 20 31 36 20 20 31 38 20 20 33 31 20 20 33 32 0A 61 72 6D 20 20 36 30 20 20 36 31
    

    如果有人想访问该文件,可以在以下位置找到 http://aftabubuntu.cloudapp.net/LIWC2001_English.dic

1 个答案:

答案 0 :(得分:2)

如果您不希望将这些数字视为不同的“单元格”或“字段”,则可以将sep设置为源文件中无处的字符。

例如:

df1 <- read.table("myfile",sep="|")

对于header=TRUE,仅当您的第一行包含列的名称时才应使用此选项。如果不是这样,请不要插入。要跳过第一行,只需使用skip=1

然后,您将能够使用

访问各行
df1[1,] # for first line
df1[2,] # for second line
        # and so on ...