将列值附加到另一列

时间:2019-04-01 13:57:32

标签: r unix append

我有一个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可能会更好...

谢谢

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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")

答案 2 :(得分:1)

使用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")