【问题标题】:Appending result to existing file in R using write.table使用 write.table 将结果附加到 R 中的现有文件
【发布时间】:2015-05-26 05:19:18
【问题描述】:

我对 R 中的文件进行了文本挖掘,然后将其作为新列附加到现有文件中。完成后,将在实际内容之后添加该列。我该如何纠正?

结果如下:

Customer Names
T-MAX INDUSTRIAL LTD
T-MAX INDUSTRIAL LTD.
ADCHEM
ADCHEM (AUSTRALIA)
ADCHEM (AUSTRALIA) PTY LTD
AUROBINDO PHARMA (AUSTRALIA)
AUROBINDO PHARMA (AUSTRALIA) PTY
Aurobindo Pharma (Australia) Pty
AUROBINDO PHARMA(AUSTRALIA) PTY LTD
AUROBINDO PHARMA(AUSTRALIA)PTY LTD
V1
tmax industrial 
tmax industrial 
adchem
adchem  
adchem   
aurobindo pharma  
aurobindo pharma  
aurobindo pharma  
aurobindo pharma   
aurobindo pharma   

但我的输出必须是这样的:

Customer Names                           V1 
T-MAX INDUSTRIAL LTD                    tmax industrial     
T-MAX INDUSTRIAL LTD.                   tmax industrial     
ADCHEM                                  adchem  
ADCHEM (AUSTRALIA)                      adchem      
ADCHEM (AUSTRALIA) PTY LTD              adchem      
AUROBINDO PHARMA (AUSTRALIA)            aurobindo pharma    
AUROBINDO PHARMA (AUSTRALIA) PTY        aurobindo pharma    
AUROBINDO PHARMA (AUSTRALIA) PTY        aurobindo pharma    
AUROBINDO PHARMA(AUSTRALIA) PTY LTD     aurobindo pharma    
AUROBINDO PHARMA(AUSTRALIA)PTY LTD      aurobindo pharma    

我使用的代码是:

result <- data.frame(text=unlist(sapply(b, `[`)), stringsAsFactors=FALSE)
write.table(result, file="Counter_Party_Testing.csv", sep=".", eol="\n", append=TRUE, row.names=FALSE, col.names=FALSE)

然后将结果以及 Original 转换为数据帧 grp1 作为 Origin ,并将 grp2 作为 Result ,现在需要打印语句的帮助,以使用 for 循环在输出文件的单行中打印两个文件中的每一个。

我在打印语句抛出一些错误时使用了此代码,

for (n in seq_len(nrow(grp1))) 
{
    print(grp1[n]+','+grp2[n]+) 
}

【问题讨论】:

  • 你使用的命令是什么?
  • 我用过write.table
  • 您应该编辑您的问题以添加您使用的命令。
  • 你有什么问题?是否要在 or 之间添加 , ?你希望输出是什么样的(你可以写一个例子..)
  • @Torxed 上面给出了所需的输出结果没有添加到新行,而是我在第一行得到附加结果,如上所示

标签: r for-loop dataframe


【解决方案1】:

已通过此代码获得所需的输出:

df <- cbind(origin, result)


# Move to new file
     write.table(df, file="new_OT5.csv", sep=",", append=TRUE , row.names=FALSE, col.names=FALSE)

【讨论】:

    【解决方案2】:
    with open('file-one.txt', 'r') as origin:
        original_data = origin.readlines()
    
    with open('file-two.txt', 'r' as merge:
        merge_data = origin.readlines()
    
    with open('output.csv', 'w' as output:
        for i in range(len(original_data)):
            output.write(original_data[i].strip() + ', ' + merge_data[i].strip() + '\n')
    

    这解决了您的数据未正确合并的问题。现在你如何使用write.table来呈现它已经不在我日常正常使用的范围内了。但就原始数据而言,这解决了它。如果您愿意,您可以将最终结果放在一个字符串中,而不是将其写入磁盘。

    需要注意的一点是,您可能最终会得到一个尾随\n,就像上面的示例一样,这需要在与同一行上的任何数据合并之前进行条带化。此外,如果合并数据与原始数据的长度不同或更大,则索引可能会超出范围。但这是错误处理,我将把它留给你,我刚刚提供了一个解决你问题的概念。除此之外,它是非常简单的编码

    【讨论】:

    • 我在 python 代码上用 R 做这个,而卡在控制台上!任何R 用户都可以帮我处理这段代码吗!
    • @Pascal,你能帮我解决上面的python 代码在R 中使用,同时在控制台尝试使用file.choose() 直接导入文件。 with open可以直接在R中使用吗?
    • 我已经完成了这个r1 &lt;- read.table(file.choose(),header=T,sep="\t")r2 &lt;- read.table(file.choose(),header=T,sep="\t")output &lt;- file.create("output.csv", "w")for i in seq(str_length(r1)) output &lt;-print(r1[i].strip() + ', ' + r2[i].strip() + '\n')但是循环语句没有执行,请帮助
    • for (n in seq_len(nrow(grp1))) { print(grp1[n]+','+grp2[n]) } 此代码打印语句抛出错误!请帮忙。
    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 2018-08-03
    • 1970-01-01
    • 2020-03-13
    • 2022-11-17
    • 1970-01-01
    • 2018-06-18
    • 2021-01-11
    相关资源
    最近更新 更多