我正在慢慢地教自己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
。我无法找到解决方案,而我对编程术语的有限知识似乎阻碍了这一点。有任何想法吗?任何建议,提示或资源都将非常感激。
答案 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