不能 `filter()` 一个数字列,即使 `r` 说它是一个数字(`typeof()` 是 "double")

Can't `filter()` a numeric column even though `r` says it is a number (`typeof()` is "double")

我是 r 的新手,但我环顾四周并尝试了我能想到的一切。这是一步一步的:

我有:

示例代码

df_names <- read_csv("file.csv", n_max=0) %>% names()
test <- read_csv("file.csv", skip=3, col_names=df_names, trim_ws = T)
test2 <- test %>% filter('Duration (in seconds)' == 0) #no rows but should be 6
test2 <- test %>% filter('Duration (in seconds)' > 0) #all rows but should be 3

数据:file.csv

在引用您的变量名称时尝试用反引号替换您的引号:

test2 <- test %>% filter(`Duration (in seconds)` == 0) #no rows but should be 6
test2 <- test %>% filter(`Duration (in seconds)` > 0) #all rows but should be 3

说明:引号表示R中的字符串;由于您的列不是字符串,因此您的原始过滤器命令不会 select 您想要的列,因此不会 return 过滤数据框中的任何行。

反引号在 R 中有 ,但其中之一是为您提供一种引用非句法名称的方法。我们需要在这个例子中使用反引号,因为你的列名中有空格。如果我们不这样做,R 会假定 Duration (in seconds) 中的每个单词都是一个单独的对象,这将是非句法的并引发错误。

使用 base R

中的 subset
subset(test, `Duration (in seconds)` == 0)