不能 `filter()` 一个数字列,即使 `r` 说它是一个数字(`typeof()` 是 "double")
Can't `filter()` a numeric column even though `r` says it is a number (`typeof()` is "double")
我是 r
的新手,但我环顾四周并尝试了我能想到的一切。这是一步一步的:
- 从 Qualtrics 中提取数据到 csv
- 使用
read_csv()
(使用 read.csv()
更难)删除所有(在本例中为 3)header 行并将其中一个保存到 names()
- 使用
read_csv
提取数据并使用 names()
分配 header
- 根据数值过滤
Duration (in seconds)
无效。也就是说,`filter('Duration (in seconds)' == 0) 产生一个没有观察值的数据框。
我有:
- 成功过滤其他数值列
- 已验证
typeof(test$'Duration (in seconds)')
是“double”
- 已验证
read_csv()
将 'Duration (in seconds)' 导入为双精度(即 'Duration (in seconds)' = col_double()
)
示例代码
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)
我是 r
的新手,但我环顾四周并尝试了我能想到的一切。这是一步一步的:
- 从 Qualtrics 中提取数据到 csv
- 使用
read_csv()
(使用read.csv()
更难)删除所有(在本例中为 3)header 行并将其中一个保存到names()
- 使用
read_csv
提取数据并使用names()
分配 header
- 根据数值过滤
Duration (in seconds)
无效。也就是说,`filter('Duration (in seconds)' == 0) 产生一个没有观察值的数据框。
我有:
- 成功过滤其他数值列
- 已验证
typeof(test$'Duration (in seconds)')
是“double” - 已验证
read_csv()
将 'Duration (in seconds)' 导入为双精度(即'Duration (in seconds)' = col_double()
)
示例代码
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 中有 Duration (in seconds)
中的每个单词都是一个单独的对象,这将是非句法的并引发错误。
使用 base R
subset
subset(test, `Duration (in seconds)` == 0)