当一列的值大于 r 中的另一列时,如何将数据框中的行值转换为 NA?
How to turn the row values in a dataframe into NA when the values of one column are greater than another column in r?
我的数据是这样的:
> dput(head(CORt, 5))
structure(list(rDate = structure(c(1438019100, 1438019400, 1438019700,
1438020000, 1438020300), class = c("POSIXct", "POSIXt"), tzone = "UTC"),
I630 = c(0.536, 0.506, 0.419, 0.456, 0.427), I800 = c(0.414,
0.388, 0.339, 0.351, 0.331), I532 = c(0.547, 0.534, 0.463,
0.488, 0.464), I570 = c(0.522, 0.508, 0.467, 0.468, 0.445
), WR630 = c(0.0127, 0.0573, 0.0083, 0.0057, 0.0053), WR800 = c(0.0144,
0.0506, 0.0249, 0.0163, 0.0159), WR532 = c(0.0139, 0.0394,
0.006, 0.005, 0.0049), WR570 = c(0.0176, 0.0379, 0.0094,
0.0054, 0.0049), NR630 = c(0.006, 0.034, 0.006, 0.004, 0.004
), NR800 = c(0.007, 0.04, 0.019, 0.02, 0.019), NR532 = c(0.007,
0.072, 0.01, 0.007, 0.007), NR570 = c(0.009, 0.077, 0.008,
0.007, 0.007), ER630 = c(0.0351, 0.0746, 0.0116, 0.0055,
0.0052), ER800 = c(0.0278, 0.0596, 0.03, 0.0324, 0.0303),
ER532 = c(0.04, 0.085, 0.013, 0.008, 0.008), ER570 = c(0.034,
0.083, 0.013, 0.009, 0.008)), row.names = c(NA, 5L), class = "data.frame")
在 CORt 数据框中,当 WR630
> I630
的值时,我想将该行的所有值都转换为 NA 但我想要保留 rDate
列日期和该行的 ER532
值。
我一直在使用这个代码(例子):
which(CORt$WR630>CORt$I630)
CORt[c(7632, 12530, 13684, 14260, 18295, 19735, 23770, 24634, 27529, 44055), setdiff(names(CORt), c("rDate", "ER532"))] <- NA
但是当我有 200 行时,这并不方便,例如。我正在寻找将 WR630
> I630
时的行值直接转换为 NA 的代码。
非常感谢任何帮助。
这对你有用吗?
nrow(data) %>% map(
.f = function(i) {
if (data[i,"WR630"] > data[i,"I630"] ) {
data[i,-c(1,16)] <- NA
}
data
}
)
请注意,它使用索引编号,而不是名称,以避免将 rDate
和 ER532
设置为 NA
。在你提供的数据中,我没有发现你条件成立的情况true
,所以我反向测试它确定它有效。
您可以使用 which
命令代替手动输入输出所有行号。
CORt[which(CORt$WR630>CORt$I630),setdiff(names(CORt), c("rDate", "ER532"))] <- NA
如果数据中没有任何缺失值,您也可以跳过 which
。
CORt[CORt$WR630>CORt$I630,setdiff(names(CORt), c("rDate", "ER532"))] <- NA
我的数据是这样的:
> dput(head(CORt, 5))
structure(list(rDate = structure(c(1438019100, 1438019400, 1438019700,
1438020000, 1438020300), class = c("POSIXct", "POSIXt"), tzone = "UTC"),
I630 = c(0.536, 0.506, 0.419, 0.456, 0.427), I800 = c(0.414,
0.388, 0.339, 0.351, 0.331), I532 = c(0.547, 0.534, 0.463,
0.488, 0.464), I570 = c(0.522, 0.508, 0.467, 0.468, 0.445
), WR630 = c(0.0127, 0.0573, 0.0083, 0.0057, 0.0053), WR800 = c(0.0144,
0.0506, 0.0249, 0.0163, 0.0159), WR532 = c(0.0139, 0.0394,
0.006, 0.005, 0.0049), WR570 = c(0.0176, 0.0379, 0.0094,
0.0054, 0.0049), NR630 = c(0.006, 0.034, 0.006, 0.004, 0.004
), NR800 = c(0.007, 0.04, 0.019, 0.02, 0.019), NR532 = c(0.007,
0.072, 0.01, 0.007, 0.007), NR570 = c(0.009, 0.077, 0.008,
0.007, 0.007), ER630 = c(0.0351, 0.0746, 0.0116, 0.0055,
0.0052), ER800 = c(0.0278, 0.0596, 0.03, 0.0324, 0.0303),
ER532 = c(0.04, 0.085, 0.013, 0.008, 0.008), ER570 = c(0.034,
0.083, 0.013, 0.009, 0.008)), row.names = c(NA, 5L), class = "data.frame")
在 CORt 数据框中,当 WR630
> I630
的值时,我想将该行的所有值都转换为 NA 但我想要保留 rDate
列日期和该行的 ER532
值。
我一直在使用这个代码(例子):
which(CORt$WR630>CORt$I630)
CORt[c(7632, 12530, 13684, 14260, 18295, 19735, 23770, 24634, 27529, 44055), setdiff(names(CORt), c("rDate", "ER532"))] <- NA
但是当我有 200 行时,这并不方便,例如。我正在寻找将 WR630
> I630
时的行值直接转换为 NA 的代码。
非常感谢任何帮助。
这对你有用吗?
nrow(data) %>% map(
.f = function(i) {
if (data[i,"WR630"] > data[i,"I630"] ) {
data[i,-c(1,16)] <- NA
}
data
}
)
请注意,它使用索引编号,而不是名称,以避免将 rDate
和 ER532
设置为 NA
。在你提供的数据中,我没有发现你条件成立的情况true
,所以我反向测试它确定它有效。
您可以使用 which
命令代替手动输入输出所有行号。
CORt[which(CORt$WR630>CORt$I630),setdiff(names(CORt), c("rDate", "ER532"))] <- NA
如果数据中没有任何缺失值,您也可以跳过 which
。
CORt[CORt$WR630>CORt$I630,setdiff(names(CORt), c("rDate", "ER532"))] <- NA