r - 检查列表中的值是否存在于多列 R data.table 中

问题

我有一个数据集,其中包含许多相同类型的变量,这些变量可以包含相同的值。我想检查在这些变量中,我们是否可以在列表中找到一个值列表中的一个值。

示例

假设我们有一个包含 3 个因子类型变量的数据集 DAS1DAS2DAS3。 这些变量的可能值是 c("0", "1", "x", "y") (请注意,我并不是要区分数字和字母。将每个值视为字符)。

library(data.table)

start <- data.table::data.table(DAS1 = c("0","1","x","0","1","0","1"),
                       DAS2 = c("x","y","0","0","x","1","0"),
                       DAS3 = c("1","1","y","1","x","y","0"))

我的目标是找出哪一行至少包含一个值 "x""y" 的观察值。

result <- data.table::data.table(DAS1 = c("0","1","x","0","1","0","1"),
                       DAS2 = c("x","y","0","0","x","1","0"),
                       DAS3 = c("1","1","y","1","x","y","0"),
                       xy = c(T,T,T,F,T,T,F))

条件

我真的很想用 data.table 包而不是 dplyr 因为我主要使用 data.table 而我不如果没有必要,我不想在两个包之间切换。

@lovalery 的回答

start[, xy := apply(start[,c("DAS1", "DAS2", "DAS3")],1, function(x) any(x %in% c("x", "y")))][]

最佳答案

你可以这样做:

代表

  • 代码
library(data.table)

start[, xy := apply(start,1, function(x) any(x == "x" | x == "y"))][]
  • 输出
#>    DAS1 DAS2 DAS3    xy
#> 1:    0    x    1  TRUE
#> 2:    1    y    1  TRUE
#> 3:    x    0    y  TRUE
#> 4:    0    0    1 FALSE
#> 5:    1    x    x  TRUE
#> 6:    0    1    y  TRUE
#> 7:    1    0    0 FALSE

由 reprex package 创建于 2022-03-04 (v2.0.1)

https://stackoverflow.com/questions/71349806/

相关文章:

kubernetes - 在 WSL2 中安装 Minikube 集群时无法访问已部署的服务

python - 独特的骰子组合

r - 在 R 中每月计算唯一值

javascript - React.js,列表中的每个 child 都应该有一个唯一的 "key"

r - 一种扩展R向量的有效方法

r - 在列 R 中包含列表元素

R - 如何将多个 bool 列(不知道有多少)组合成一列

ruby-on-rails - 安装带有 native 扩展 Gem::Ext::BuildErro

npm - 如何在计算机之间迁移已安装的 npm 包?

node.js - 在 Vue JS 项目上运行 npm run server 时出现错误