#r #unix #append
#r #unix #добавить
Вопрос:
У меня есть текстовый файл с разделителями табуляции следующим образом:
1 aaa apple
1 bbb banana
3 ccc grape
5 ddd orange
Я хотел бы создать другой текстовый файл, но на этот раз со значениями первого столбца исходного текстового файла, добавленными в последний столбец (в данном случае в третий столбец) с подчеркиванием следующим образом:
1 aaa 1_apple
1 bbb 1_banana
3 ccc 3_grape
5 ddd 5_orange
У меня нет предпочтений в языке программирования, но R и Unix были бы лучше, если это возможно…
Спасибо
Комментарии:
1.Посмотрите на
tidyr
unite
илиpaste0
. Каковы заголовки этих столбцов (если таковые имеются)?
Ответ №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.csv
и write.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")