【问题标题】:Factor variable forced to logical when csv imported in R在 R 中导入 csv 时,因子变量强制为逻辑
【发布时间】:2017-07-15 04:26:47
【问题描述】:

我想导入 csv 文件,但未正确读取变量。

这是我使用 Windows 记事本阅读文件时的摘录:

id,claim,automatic_generation
2839,f,f
2840,f,f
2841,t,f
2842,t,t

我已经用这个函数导入了 csv 文件:

data <- read.csv(file="ventes.csv", header=TRUE, sep=",")

并且列声明未正确读取:无论变量的值如何,它始终为 TRUE。

这是我执行 str(data) 时看到的结果

'data.frame':   4 obs. of  3 variables:
 $ id                         : int  2839 2840 2841 2842
 $ claim                      : logi  TRUE TRUE TRUE TRUE
 $ automatic_generation       : Factor w/ 2 levels "f","t": 1 1 1 0

理想情况下,我希望有两个逻辑变量:TRUE 表示“t”,FALSE 表示“f”

【问题讨论】:

  • R 无法猜测 t 和 f 将作为逻辑导入。由于它们是文本,它们被解释为字符串,然后被强制转换为因子。这是 read.csv 的默认值。您必须使用 colClasses 参数来定义每个列的类并将 t 和 f 重新编码为 TRUE 或 FALSE。
  • 谢谢,完成了。无论如何,我不明白为什么 atomatic_generation R 将变量定义为因子,而声明它确实是合乎逻辑的,即使两者具有相同的可能值“f”和“t”

标签: r read.csv


【解决方案1】:

尝试在源 csv 中使用 TF,如下所示:

bash>$ cat data
#one,two,three
#1,2,T
#1,2,T
#2,3,F
#2,3,F
#3,4,T
d <- read.csv("./data", header=T, sep=",")
#   one two three
#1    1   2  TRUE
#2    1   2  TRUE
#3    2   3 FALSE
#4    2   3 FALSE
#5    3   4  TRUE
> d$three == F
# [1] FALSE FALSE TRUE TRUE FALSE

如果您不确定,也可以强制执行此行为:

d <- read.csv("./dd", colClasses=c("numeric", "numeric", "logical"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2018-06-03
    • 2023-03-17
    • 2019-05-01
    • 1970-01-01
    • 2015-07-31
    相关资源
    最近更新 更多