2016-03-09 2 views
1

Я медленно учу себя R, с очень простым фоном в программировании. Производные графики и т. Д. Относительно просты, но сейчас я работаю над небольшим фрагментом кода с целью создания более крупного сценария, делающего обработку коммерческих результатов в лаборатории менее обременительным - они обычно выдаются в довольно дезорганизованных файлах CSV, причем смесь различных единиц концентрации.R - итерация по строкам с операторами if

Итак, я пытаюсь создать блок кода, который повторяется через строки CSV-файла, содержащего четыре заголовка столбца: «Analyte», «Unit», «LOD» и «Concentration». Я намереваюсь мой код, чтобы проверить, какое устройство используется для каждого аналита, и если она мг/л, конвертировать концентрацию в мкг/л для данного анализируемого вещества:

input_file <- read.csv(file="test.csv", header = TRUE,sep = ",") 


apply(input_file, 1, function(row) { 
    if (input_file$Unit == "mg/l"){ 
    input_file$Concentration <- input_file$Concentration*1000 
    } 
    } 
) 

print(input_file) 

Когда я запускаю этот код (я используя Rstudio), появляется следующее сообщение об ошибке: In if (input_file$Unit == "mg/l") { : the condition has length > 1 and only the first element will be used. Я не могу найти решение этого, и мои ограниченные знания программирования жаргона, кажется, мешают этому. Есть идеи? Любые предложения, подсказки или ресурсы будут высоко оценены.

ответ

1

Я считаю, что это то, что вы собирались сделать:

apply(input_file, 1, function(row) { 
    if (row$Unit == "mg/l"){ 
     row$Concentration <- row$Concentration*1000 
    } 
}) 

Временная переменная row представляет каждую строку входного файла, и именно это вы имеете в виду изменить.

Вот более эффективный способ сделать это:

input_file[input_file$Unit == "mg/l", "Concentration"] <- 
    input_file[input_file$Unit == "mg/l", "Concentration"]*1000 
+0

возможно, 'input_file [input_file $ Unit == "мг/л",] $ концентрационного <- input_file [input_file $ Unit ==«мг/l ",] $ Концентрация * 1000'? – SymbolixAU

+0

@Symbolix Мои мысли точно, спасибо за комментарий. –

Смежные вопросы