R - 使用if语句迭代行

时间:2016-03-09 06:30:17

标签: r iteration

我正在慢慢地教自己R,具有非常基本的编程背景。制作图表等是相对简单的,但我目前正在编写一小段代码,目的是构建一个更大的脚本,使得处理商业实验室结果的工作量减少繁琐 - 这些通常是在相当杂乱无章的CSV文件中发布的,不同浓度单位的混合物。

所以,我正在尝试生成一个代码块,它遍历包含四个列标题的CSV文件行:" Analyte"," Unit"," LOD"和"浓度"。我打算让我的代码检查每个分析物使用哪个单位,如果是mg / l,将该分析物的浓度转换为ug / l:

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 个答案:

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