gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 09:02:29 24 4
gpt4 key购买 nike

问题

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

示例

假设我们有一个包含 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)

关于r - 检查列表中的值是否存在于多列 R data.table 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71349806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com