【发布时间】:2019-02-03 18:45:31
【问题描述】:
我有以下数据框,我想用 NA 替换反射率值,具体取决于波长值是否落在被确定为错误测量值的特定范围组(badData 矢量)。
不良数据的范围可能会随着时间而变化,因此我希望解决方案尽可能通用。
badData <- c(296:310, 330:335, 350:565)
df <- data.frame(wavelength = seq(300,360,5.008667),
reflectance = seq(-1,-61,-5.008667))
df
wavelength reflectance
300.0000 -1.000000
305.0087 -6.008667
310.0173 -11.017334
315.0260 -16.026001
320.0347 -21.034668
325.0433 -26.043335
330.0520 -31.052002
335.0607 -36.060669
340.0693 -41.069336
345.0780 -46.078003
350.0867 -51.086670
355.0953 -56.095337
我试过了
Data2 <- df %>%
mutate(reflectance = replace(reflectance,wavelength %in% badData, NA))
但是因为我试图用波长范围而不是精确值来做到这一点,所以这是行不通的。我在想我应该使用条件语句,但我不知道如何最有效地通过它来提供具有不同范围分组的向量。
输出数据集是因为波长 300.000 和 305.0087 介于 296 和 310 之间,波长 330.05620 介于 330 和 335 之间,以及 350.0867 和 355.0953 介于 350:565 之间。
wavelength reflectance
300.0000 NA
305.0087 NA
310.0173 -11.017334
315.0260 -16.026001
320.0347 -21.034668
325.0433 -26.043335
330.0520 NA
335.0607 -36.060669
340.0693 -41.069336
345.0780 -46.078003
350.0867 NA
355.0953 NA
【问题讨论】:
-
您将
badData定义为整数和小数之间的范围,这是没有意义的(冒号本质上表示“从first 到last i> 按个”)。那你希望用%in%看一个数值是否在这个准整数向量内,严重受制于R FAQ 7.31(浮点数的比较)。我怀疑您打算将badData中的号码设为“lo:hi”,对吗? -
我更新了我的帖子以添加预期的输出@RonakShah
-
抱歉@r2evans 由于我的实际数据集与我为堆栈溢出创建的虚拟数据集之间存在差异,存在一些拼写错误。它们现已更新。
-
这并没有解决我的数字问题:从技术上讲,any 浮点数被测试为
%in%integers 的向量将 总是失败。好的,所以它有时可能会起作用,但你永远不能相信它。 -
@r2evans 非常抱歉,感谢您的来信。我以为我已经接受了。
标签: r replace conditional dplyr