相关疑难解决方法(0)

在R中的data.table中选择NA

如何选择数据表中主键中缺少值的所有行.

DT = data.table(x=rep(c("a","b",NA),each=3), y=c(1,3,6), v=1:9)
setkey(DT,x)   
Run Code Online (Sandbox Code Playgroud)

选择特定值很容易

DT["a",]  
Run Code Online (Sandbox Code Playgroud)

选择缺失值似乎需要矢量搜索.一个人不能使用二进制搜索.我对么?

DT[NA,]# does not work
DT[is.na(x),] #does work
Run Code Online (Sandbox Code Playgroud)

select r missing-data na data.table

23
推荐指数
2
解决办法
2万
查看次数

DT [!(x ==.)]和DT [x!=.]不一致地处理x中的NA

这是我认为应该问这个问题的问题.我想在R-forge跟踪器中将其作为一个错误/不一致之前确认是否存在错误/不一致.

考虑一下data.table:

require(data.table)
DT <- data.table(x=c(1,0,NA), y=1:3)
Run Code Online (Sandbox Code Playgroud)

现在,要访问不是 0 的DT的所有行,我们可以通过以下方式执行:

DT[x != 0]
#    x y
# 1: 1 1
DT[!(x == 0)]
#     x y
# 1:  1 1
# 2: NA 3
Run Code Online (Sandbox Code Playgroud)

当基础逻辑操作等效时,访问DT[x != 0]并DT[!(x==0)]给出不同的结果.

注:转换到这一个data.frame和运行这些操作会给结果彼此两个逻辑上是等价的操作相同,但结果是不同的两种data.table结果.有关原因的解释,请?`[`参阅本节NAs in indexing.

编辑:由于你们中的一些人已经强调要求平等data.frame,这里是data.frame上相同操作的输出片段:

DF <- as.data.frame(DT)
# check ?`[` under the section `NAs in indexing` as to why this happens
DF[DF$x != 0, …
Run Code Online (Sandbox Code Playgroud)

r dataframe data.table

21
推荐指数
2
解决办法
637
查看次数

使用!= <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
查看次数

data.table内部/外部连接,在double类型的连接列中使用NA?

在这篇维基百科文章SQL join之后,我希望能够清楚地了解如何与data.table建立联接.在这个过程中,我们可能在加入NAs时发现了一个错误.以wiki为例:

R) X = data.table(name=c("Raf","Jon","Ste","Rob","Smi","Joh"),depID=c(31,33,33,34,34,NA),key="depID")
R) Y = data.table(depID=c(31,33,34,35),depName=c("Sal","Eng","Cle","Mar"),key="depID")
R) X
   name depID
1:  Joh    NA
2:  Raf    31
3:  Jon    33
4:  Ste    33
5:  Rob    34
6:  Smi    34
R) Y
   depID depName
1:    31     Sal
2:    33     Eng
3:    34     Cle
4:    35     Mar
Run Code Online (Sandbox Code Playgroud)

LEFT OUTER JOIN

R) merge.data.frame(X,Y,all.x=TRUE)
  depID name depName
1    31  Raf     Sal
2    33  Jon     Eng
3    33  Ste     Eng
4    34  Rob     Cle
5    34  Smi     Cle
6    NA …
Run Code Online (Sandbox Code Playgroud)

r inner-join outer-join data.table

10
推荐指数
1
解决办法
6599
查看次数

NA/NaN/Inf in data.table 1.9.2

在检查了data.table 1.9.2的新功能之后,我不太清楚操作NA/NaN/Inf的新功能.

新闻:

NA,NaN,+ Inf和-Inf现在被认为是不同的值,可以是键,可以加入并可以分组.data.table定义:NA <NaN <-Inf

我不知道"可以加入并可以分组"是什么意思

DT <- data.table(A=c(NA,NA,1:3), B=c("a",NA,letters[1:3]))
Run Code Online (Sandbox Code Playgroud)

现在我们在A列和B列都有NA,

但我失去了一些如何继续,这个新功能的目的是什么.你能提供一个例子来说明这一点吗?

非常感谢!

r data.table

6
推荐指数
1
解决办法
977
查看次数

标签 统计

data.table ×5

r ×5

dataframe ×1

inner-join ×1

missing-data ×1

na ×1

outer-join ×1

select ×1