首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strsplit()输出为r中的dataframe

strsplit()输出为r中的dataframe
EN

Stack Overflow用户
提问于 2018-09-20 21:27:02
回答 2查看 440关注 0票数 0

我有一些来自Python语言模型的结果,我已经将其保存为.txt,以便在RMarkdown中呈现。

.txt是这样的。

代码语言:javascript
复制
             precision    recall  f1-score   support

          0       0.71      0.83      0.77      1078
          1       0.76      0.61      0.67       931

avg / total       0.73      0.73      0.72      2009

我把文件读成了r,

x <- read.table(file = 'report.txt', fill = T, sep = '\n')

当我保存它时,r将结果保存为一列(V1),而不是5列,如下所示。

代码语言:javascript
复制
                                                    V1
1              precision    recall  f1-score   support
2           0       0.71      0.83      0.77      1078
3           1       0.76      0.61      0.67       931
4 avg / total       0.73      0.73      0.72      2009

我尝试使用strsplit()拆分列,但不起作用。

代码语言:javascript
复制
strsplit(as.character(x$V1), split = "|", fixed = T)

也许strsplit()不是正确的方法?我如何解决这个问题,以便我有一个4x5数据帧。

非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2018-09-20 23:34:58

不是很优雅,但这很管用。首先我们读取原始文本,然后使用正则表达式进行清理、删除空白并转换为csv可读格式。然后我们读csv。

代码语言:javascript
复制
library(stringr)
library(magrittr)
library(purrr)

text <- str_replace_all(readLines("~/Desktop/test.txt"), "\\s(?=/)|(?<=/)\\s", "") %>% 
  .[which(nchar(.)>0)] %>% 
  str_split(pattern = "\\s+") %>% 
  map(., ~paste(.x, collapse = ",")) %>% 
  unlist

read.csv(textConnection(text))
#>           precision recall f1.score support
#> 0              0.71   0.83     0.77    1078
#> 1              0.76   0.61     0.67     931
#> avg/total      0.73   0.73     0.72    2009

reprex package创建于2018-09-20 (v0.2.0)。

票数 0
EN

Stack Overflow用户

发布于 2018-09-21 15:49:42

因为让python输出csv要简单得多,所以我在这里发布了一个替代方案。以防万一它是有用的,即使在python中也需要做一些工作。

代码语言:javascript
复制
def report_to_csv(report, title):
    report_data = []
    lines = report.split('\n')

    # loop through the lines
    for line in lines[2:-3]:
        row = {}
        row_data = line.split('      ')
        row['class'] = row_data[1]
        row['precision'] = float(row_data[2])
        row['recall'] = float(row_data[3])
        row['f1_score'] = float(row_data[4])
        row['support'] = float(row_data[5])
        report_data.append(row)

    df = pd.DataFrame.from_dict(report_data)

    # read the final summary line
    line_data = lines[-2].split('     ')
    summary_dat = []
    row2 = {}
    row2['class'] = line_data[0]
    row2['precision'] = float(line_data[1])
    row2['recall'] = float(line_data[2])
    row2['f1_score'] = float(line_data[3])
    row2['support'] = float(line_data[4])
    summary_dat.append(row2)

    summary_df = pd.DataFrame.from_dict(summary_dat)

    # concatenate both df. 
    report_final = pd.concat([df,summary_df], axis=0)
    report_final.to_csv(title+'cm_report.csv', index = False)

受启发的函数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52426244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档