r - 根据逻辑条件选择 data.table 中的单个元素
问题描述
我正在考虑根据特定条件更改 data.table 的一些单个元素。基本上,如果 DT 的一个元素与向量的一个元素匹配,invalid_values
我想将其设置为 -99。
我在下面给出了一个简单的可重现示例。检查 DT 的所有值以匹配一个值可以正常工作,但是当我切换到 %in% 时,它不能按预期工作。我想在这里避免一个 for 循环。
DT = data.table(
a = rep(c(2,9), 5),
b = rep(c(7,5), 5),
c = rep(c(1,2), 5),
d = rep(c(4,8), 5)
)
invalid_values <- c(2, 7)
# wiith loop
for (i in seq(invalid_values)) {
DT[DT == invalid_values[i] <- -99]
}
# idea
DT[DT %in% invalid_values] <- -99
任何帮助表示赞赏。
解决方案
%in%
不会直接在 dataframe/data.table 上工作。用于lapply
迭代列和要replace
的值 。invalid_values
-99
library(data.table)
DT[, lapply(.SD, function(x) replace(x, x %in% invalid_values, -99))]
# a b c d
# 1: -99 -99 1 4
# 2: 9 5 -99 8
# 3: -99 -99 1 4
# 4: 9 5 -99 8
# 5: -99 -99 1 4
# 6: 9 5 -99 8
# 7: -99 -99 1 4
# 8: 9 5 -99 8
# 9: -99 -99 1 4
#10: 9 5 -99 8
推荐阅读
- flutter - 如何在颤动中自定义位置按钮?
- php - 删除 foreach 循环的最后一个字符串值
- azure - 我们可以在 ARM 模板部署期间像 Azure 对应用服务域那样运行休息调用吗?
- ios - 通过 Azure DevOps 将 iOS 应用程序发布到 testflight 的问题
- mongodb - 如何监控mongo db副本状态并重新配置repliica
- android - 如何在xml编写的customview中将属性设置为val
- c# - 使用 .NET Core 创建、显示和保存/导出绘图/图表
- asp.net-core - 有没有人可以为我提供解决此错误的方法?我不明白我在配置 IdentityServer4 时哪里错了
- c++ - 使用 const char* 键映射 c++ 检索 null
- kubernetes - 用于防止强制更新 AWS EKS 集群的 Terraform