代码之家  ›  专栏  ›  技术社区  ›  Maxxx

格式化R数据帧的输出

r
  •  0
  • Maxxx  · 技术社区  · 5 年前

    因此,我目前在R中有一个数据帧,我想使用以下命令将其导出/写入文本文件 write.table()

    以下是数据帧的示例:

    ID      FirstName     LastName             Class
    1000    John            NA                  C-02
    1001    Jane            Wellington          C-03
    1002    Kate            NA                  C-04
    1003    Adam            West                C-05
    

    我想把它写到一个文本文件中,对于每一行,如果任何列值都是NA,那么它就不会包含单词“NA”,而是继续到另一列。我想要的输出:

    1000    John      C-02
    1001    Jane      Wellington      C-03
    1002    Kate      C-04
    1003    Adam      West       C-05
    

    如图所示,第一行没有输入姓氏,因此我将继续下一列,防止出现以下情况:

    1000    John      NA      C-02
    

    我执行了write.table()命令:

    write.table(df, "student_list.txt", col.names = FALSE, row.names = FALSE, quote = FALSE, sep="\t")
    

    但问题是,我得到的是我提到的第二个输出中包含NA的输出。

    1 回复  |  直到 5 年前
        1
  •  0
  •   Phil    5 年前
    library(tidyverse)
    
    dta <- tribble(
      ~ID, ~FirstName, ~LastName, ~Class,
      1000, "John", NA, "C-02",
      1001, "Jane", "Wellington", "C-03",
      1002, "Kate", NA, "C-04",
      1003, "Adam", "West", "C-05"
    )
    
    dta %>%
      unite(column, everything(), sep = "  ") %>%
      mutate(column = str_remove_all(column, "NA  ")) %>%
      write.table("student_list.txt", col.names = FALSE, row.names = FALSE, quote = FALSE, sep = "\t")
    
        2
  •  0
  •   Taher A. Ghaleb    5 年前

    我会用 apply 要删除 NA s并将行转换为文本行(使用 paste ),如下:

    data <- apply(df, 1, function(row){
      paste(row[!is.na(row)], collapse="\t")
    })
    
    write.table(data, "student_list.txt", col.names = FALSE, row.names = FALSE, quote = FALSE, sep="\t")
    

    文件输出如下:

    #1000   John    C-02
    #1001   Jane    Wellington  C-03
    #1002   Kate    C-04
    #1003   Adam    West    C-05