【问题标题】:append column values to another column将列值附加到另一列
【发布时间】:2019-08-22 17:24:34
【问题描述】:

我有一个 txt 文件制表符,分隔如下:

1 aaa apple
1 bbb banana
3 ccc grape
5 ddd orange

我想创建另一个 txt 文件,但这次将原始 txt 文件的第一列值附加在最后一列(在本例中为第三列)中,并带有如下下划线:

1 aaa 1_apple
1 bbb 1_banana
3 ccc 3_grape
5 ddd 5_orange

我没有任何编程语言偏好,但如果可能,R 和 Unix 会更好...

谢谢

【问题讨论】:

  • tidyrunitepaste0。这些列的标题是什么(如果有)?

标签: r unix append


【解决方案1】:

如果你想使用bash,你可以试试:

$ awk '{print $1, $2, $1"_"$3}' file.txt > file2.txt
$ cat file2.txt
1 aaa 1_apple
1 bbb 1_banana
3 ccc 3_grape
5 ddd 5_orange

如果你想在R做,那么试试下面的R代码:

a <- read_table("file.txt", col_names = FALSE)
a$X3 <- paste(a$X1, a$X3, sep = "_")
write_delim(a, "file2.txt", col_names = FALSE)

文件应如下所示:

$ cat file2.txt
1 aaa 1_apple
1 bbb 1_banana
3 ccc 3_grape
5 ddd 5_orange

【讨论】:

    【解决方案2】:
    df$NewColumn<-paste0(df[,1],"_",df[,ncol(df)])
    df
    V1  V2     V3 NewColumn
    1  1 aaa  apple   1_apple
    2  1 bbb banana  1_banana
    3  3 ccc  grape   3_grape
    4  5 ddd orange  5_orange
    

    写入 .txt

    write.table(tidyr::unite(df,New_col,"V1","V3"),"test.txt")
    

    tidyr:

    tidyr::unite(df,New_col,"V1","V3")
    

    数据

    df<-read.table(text="1 aaa apple
    1 bbb banana
    3 ccc grape
    5 ddd orange")
    

    【讨论】:

      【解决方案3】:

      对于 R,我们可以尝试使用 read.csvwrite.csv,并进行一些字符串操作:

      df <- read.csv(file="path/to/your/file.txt")   # one column for entire value
      lines <- sapply(df[,1], function(x) {
          parts <- strsplit(x, " ")[[1]]
          parts[3] <- paste0(parts[1], "_", parts[3])
          return(paste0(parts, collapse=" "))
      })
      write.csv(rbind(lines), file="path/to/your/output.txt")
      

      【讨论】:

        猜你喜欢
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 2020-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-06
        相关资源
        最近更新 更多