gpt4 book ai didi

r - 如何在R中的数据表中创建动态查询

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

更新示例:我有一个功能如下:

myfun <- function(DT, var){  
for(i in 1:length(var)){
s = substitute(!(is.na(x) | is.nan(x)), list(x=as.symbol(eval(var[i]))))
DT = DT[eval(s)]
}
return(DT)
}

输入:

> dt = data.table(id=c(1,2,3,4,5), x=c(1,2,NA,4,5), y=c(1,NA,3,4,NA))
> dt
id x y
1: 1 1 1
2: 2 2 NA
3: 3 NA 3
4: 4 4 4
5: 5 5 NA

运行:

> myfun(dt, var=c("x", "y"))
id x y
1: 1 1 1
2: 4 4 4
> myfun(dt, var=c("x"))
id x y
1: 1 1 1
2: 2 2 NA
3: 4 4 4
4: 5 5 NA

var是DT中一些变量的字符数组。目标是仅获取 DT 中没有任何 NANaN 的行到 var 中的任何变量。

我不想要 for 循环。我想构造一个包含所有条件的查询 s,然后为 DT 评估该查询.对于我想要的第一种情况:

s = !(is.na(x) | is.nan(x) | is.na(y) | is.nan(y))

对于第二种情况,我想要:

s = !(is.na(x) | is.nan(x))

我如何构造一个动态查询s,并在数据表中作为i/where查询运行一次。

更一般地说,我如何根据输入创建动态 expression。使用 expression(paste()) 对我没有帮助。然后我可以使用 substitute

最佳答案

和:

var = c("x","y")
str=paste0("is.na(",var,") |", " is.nan(",var,")", collapse="|")
s = parse(text=paste("!(",str,")"))
DT[eval(s)]

来源:How to use an unknown number of key columns in a data.table

关于r - 如何在R中的数据表中创建动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18614402/

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