Вы также можете сделать это в базе R, отключив уникальные куски в именах парных столбцов (и двух столбцов, которые вы хотите перезаписать во всех выходных файлах). Итак, здесь вы используете grep
и gsub
для создания вектора этих уникальных пней из имен столбцов res_merge_2
, а затем выполняете над ним простую функцию выбора столбца и записи csv.
lapply(unique(gsub("-FDA.*", "", grep("-FDA.*", names(res_merge_2), value = TRUE))), function(x) {
write.csv(res_merge_2[,c(grep("otu", names(res_merge_2), value = TRUE), grep(x, names(res_merge_2), value = TRUE))],
sprintf("%s.csv", x))
})
Это неплохое место для использования for
l oop, однако, например:
for (x in unique(gsub("-FDA.*", "", grep("-FDA.*", names(res_merge_2), value = TRUE)))) {
write.csv(res_merge_2[,c(grep("otu", names(res_merge_2), value = TRUE), grep(x, names(res_merge_2), value = TRUE))],
sprintf("%s.csv", x))
}
Оба из них работали для меня с этим набором игрушечных данных:
res_merge_2 <- structure(list(otu1 = c("dog", "dog", "dog", "dog", "dog", "dog",
"dog", "dog", "dog", "dog"), otu2 = c("cat", "cat", "cat", "cat",
"cat", "cat", "cat", "cat", "cat", "cat"), `X32-T26-FDA.x` = c("a",
"b", "c", "d", "e", "f", "g", "h", "i", "j"), `X32-T26-FDA.y` = c("A",
"B", "C", "D", "E", "F", "G", "H", "I", "J"), `X15-X3Q-FDA.x` = c(-0.0391614774317114,
-0.749042584495182, -1.35322520345808, -0.542635541523875, 0.554157309246222,
-0.022582818348649, -1.02251842826834, 1.30695316220872, 0.733483858951273,
0.495620995563405), `X15-X3Q-FDA.y` = c(0.097683395164639, -1.31072727972662,
-0.324722669182535, -0.194820429986227, 1.13036969830475, -0.376850316761238,
-1.89704006462136, -0.11021797586389, -0.243968444535775, 1.12909359192043
)), class = "data.frame", row.names = c(NA, -10L))