这是我认为应该问这个问题的问题.我想在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) 我在数据表中有一个包含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]
我需要为id分组的显式行获取行号.假设dataframe(df)如下所示:
id a b
3 2 NA
3 3 2
3 10 NA
3 21 0
3 2 NA
4 1 5
4 1 0
4 5 NA
Run Code Online (Sandbox Code Playgroud)
我需要创建一个列,它将给出行号序列,不包括大小写b == 0.
期望的输出:
id a b row
3 2 NA 1
3 3 2 2
3 10 NA 3
3 21 0 -
3 2 NA 4
4 1 5 1
4 1 0 -
4 5 NA 2
Run Code Online (Sandbox Code Playgroud)
我使用dplyr但无法实现相同,我的代码:
df <- df %>%
group_by(id) %>%
mutate(row = row_number(id[b …Run Code Online (Sandbox Code Playgroud)