我有一个与数据框中的列同名的变量:
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外部变量.
在为位置分配值时,我发现了这种奇怪的行为.如果变量与列相同,则认为我们正在讨论该列:
library(data.table)
dt1 <- data.table(a = integer(1))
a <- 18
dt1[1, a:=a]
Run Code Online (Sandbox Code Playgroud)
结果:
Run Code Online (Sandbox Code Playgroud)> dt1 a 1: 0
我们可以使用不同的名称来避免这种情况
dt2 <- data.table(a = integer(1))
b <- 18
dt2[1, a:=b]
Run Code Online (Sandbox Code Playgroud)
结果:
Run Code Online (Sandbox Code Playgroud)>dt2 a 1: 18
但是,有没有另一种方法来做到这一点而不改变变量的名称?我读了关于.() ..()符号但是我不确定我是否可以在这里使用它,例如:
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)