我有一个data.table逻辑列.为什么逻辑列的名称不能直接用于i参数?查看示例.
dt <- data.table(x = c(T, T, F, T), y = 1:4)
# Works
dt[dt$x]
dt[!dt$x]
# Works
dt[x == T]
dt[x == F]
# Does not work
dt[x]
dt[!x]
Run Code Online (Sandbox Code Playgroud) 我有一个data.table,列有一个NAs.我想删除该列占用特定值的行(恰好是这样"").但是,我的第一次尝试也导致我丢失了NAs 行:
> a = c(1,"",NA)
> x <- data.table(a);x
a
1: 1
2:
3: NA
> y <- x[a!=""];y
a
1: 1
Run Code Online (Sandbox Code Playgroud)
看了之后?`!=`,我找到了一个有效的衬垫,但这很痛苦:
> z <- x[!sapply(a,function(x)identical(x,""))]; z
a
1: 1
2: NA
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法来做到这一点?此外,我认为没有好的方法来扩展它以排除多个非NA值.这是一个糟糕的方式:
> drop_these <- function(these,where){
+ argh <- !sapply(where,
+ function(x)unlist(lapply(as.list(these),function(this)identical(x,this)))
+ )
+ if (is.matrix(argh)){argh <- apply(argh,2,all)}
+ return(argh)
+ }
> x[drop_these("",a)]
a
1: 1
2: NA
> x[drop_these(c(1,""),a)]
a
1: NA
Run Code Online (Sandbox Code Playgroud)
我查看?J …
我在数据表中有一个包含NaN值的列.就像是:
my.dt <- data.table(x = c(NaN, NaN, NaN, .1, .2, .2, .3), y = c(2, 4, 6, 8, 10, 12, 14))
setkey(my.dt, x)
Run Code Online (Sandbox Code Playgroud)
我可以使用该J()函数来查找x列等于.2的所有实例
> my.dt[J(.2)]
x y
1: 0.2 10
2: 0.2 12
Run Code Online (Sandbox Code Playgroud)
但如果我尝试用NaN它做同样的事情就行不通.
> my.dt[J(NaN)]
x y
1: NaN NA
Run Code Online (Sandbox Code Playgroud)
我希望:
x y
1: NaN 2
2: NaN 4
3: NaN 6
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?我在data.table文档中找不到任何解释为什么会发生这种情况的事情(尽管可能只是因为我不知道该寻找什么).有什么方法可以得到我想要的东西吗?最后,我想NaN用零替换所有值,使用类似的东西my.dt[J(NaN), x := 0]