相关疑难解决方法(0)

按逻辑列的子集data.table

我有一个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)

r subset data.table

28
推荐指数
1
解决办法
3729
查看次数

使用!= <some non-NA>对data.table进行子集化也排除了NA

我有一个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 …

r data.table

16
推荐指数
2
解决办法
3714
查看次数

由NaN进行的data.table子集不起作用

我在数据表中有一个包含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]

r data.table

5
推荐指数
1
解决办法
839
查看次数

标签 统计

data.table ×3

r ×3

subset ×1