Извлечение и фильтрация столбцов данных с использованием R by loop - PullRequest
0 голосов
/ 26 апреля 2020

Я новичок ie в R и буду признателен за вашу помощь. У меня есть фрейм данных с 5 столбцами (файлы fasta и четыре штамма) данных и 10 строками.

     genome <- data.frame(fasta = rnorm(10), strain1 = rnorm(10), strain2 = rnorm(10), strain3 = rnorm(10), strain4 = rnorm(10))

Я хочу разбить фрейм данных на два столбца (fasta и strainn), используя al oop, поэтому В конце всего этого у меня будет 4 отдельных файла CSV с 2 столбцами данных. В каждом из файлов я хочу отфильтровать столбец штамма, который содержит только строки с заданным максимальным значением, например 0,5, в новых фреймах данных. До сих пор я мог создавать кадры данных с помощью «function (x) NULL», но я не могу фильтровать или экспортировать кадры данных после добавления функции фильтра. Как мне отфильтровать и экспортировать файлы? Мои коды до сих пор:

nstrain <- ncol(genome)-1

dataframes <- lapply(1:nstrain, function(x) NULL)

  for (i in 1:nstrain) {
  dataframes[[i]] <- data.frame(genome$fasta, genome[i+1])
  }

dataframes

Я хочу получить такие кадры данных, как эти

> dataframes
[[1]]
   genome.fasta    strain1
1    1.04954754 0.2358870
2    0.20305724 0.4763678
3    1.04875114  0.3216317
4    0.05839317 0.2899819
5    0.54135630 0.0100254

[[2]]
   genome.fasta    strain2
1    0.20305724  0.3915370
2    1.04875114 0.3294302
3   -0.03065096 0.4339920
4    0.70639127 0.3092204
5    0.54135630  0.2708824
6   0.65988727 0.4862548

[[3]]
   genome.fasta    strain3
1    0.44547248  0.3196918
2    1.04954754  0.3320331
3    0.54135630  0.3039161

[[4]]
   genome.fasta     strain4
1    0.44547248  0.21858664
2   -0.03065096 0.23830566

Ваша помощь будет принята с благодарностью. Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020
genome <- data.frame(fasta = rnorm(10), strain1 = rnorm(10), strain2 = rnorm(10), strain3 = rnorm(10), strain4 = rnorm(10))
genome

nstrain = 4
dfs =  vector(mode = "list", length = nstrain)

for(i in 1:nstrain){
  dfs[[i]] = genome[,c(1,i+1)]
  write.csv(dfs[[i]], file = paste0(i,".csv:))

}
0 голосов
/ 26 апреля 2020

Если вы хотите написать отдельные csv для каждого штамма, вы можете использовать lapply:

lapply(seq_along(genome[-1]), function(x) {
    write.csv(subset(cbind(genome[1], genome[x+1]), genome[[x + 1]] < 0.6), 
       paste0('strain', x, '.csv'), row.names = FALSE)
})

Это даст вам файлы 'strain1.csv', 'strain2.csv' et c в вашем рабочем каталоге ,


Если вы хотите вернуть список данных, вы можете удалить часть write.csv и использовать

data <- lapply(seq_along(genome[-1]),function(x) 
            subset(cbind(genome[1], genome[x+1]), genome[[x + 1]] < 0.6))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...