相关疑难解决方法(0)

如何在dplyr :: filter中使用变量?

我有一个与数据框中的列同名的变量:

df <- data.frame(a=c(1,2,3), b=c(4,5,6))
b <- 5
Run Code Online (Sandbox Code Playgroud)

我想把行df$b == b放到哪里,但是dplyr将其解释为df$b == df$b:

df %>% filter(b == b) # interpreted as df$b == df$b
#   a b
# 1 1 4
# 2 2 5
# 3 3 6
Run Code Online (Sandbox Code Playgroud)

如果我更改变量名称,它可以工作:

B <- 5
df %>% filter(b == B) # interpreted as df$b == B
#   a b
# 1 2 5
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来filter指出b外部变量.

r dplyr

18
推荐指数
4
解决办法
5972
查看次数

data.table:=变量与列同名时的赋值

在为位置分配值时,我发现了这种奇怪的行为.如果变量与列相同,则认为我们正在讨论该列:

library(data.table)
dt1 <- data.table(a = integer(1))
a <- 18
dt1[1, a:=a]
Run Code Online (Sandbox Code Playgroud)

结果:

> dt1
   a
1: 0
Run Code Online (Sandbox Code Playgroud)

我们可以使用不同的名称来避免这种情况

dt2 <- data.table(a = integer(1))
b <- 18
dt2[1, a:=b]
Run Code Online (Sandbox Code Playgroud)

结果:

>dt2
    a
1: 18
Run Code Online (Sandbox Code Playgroud)

但是,有没有另一种方法来做到这一点而不改变变量的名称?我读了关于.() ..()符号但是我不确定我是否可以在这里使用它,例如:

dt1 <- data.table(a = integer(1))
a <- 18
dt1[1, a:=..(a)]

Error in eval(expr, envir, enclos) : could not find function ".."
Run Code Online (Sandbox Code Playgroud)

r data.table

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

标签 统计

r ×2

data.table ×1

dplyr ×1