我想将一列的所有值除以3。
当我这样做
x $ V2 / 3
它返回错误“ /”,对因素无意义
当我这样做时-as.numeric(x $ V2)/ 3
例如:-39/3-3.3333333,而不是13。
我不确定是什么问题。你能帮忙吗?
答案 0 :(得分:1)
快速解答,尽管在评论中已部分解决了该问题。
正如Infominer所建议的那样,您得到的错误是您试图除以3的列实际上是一个因素。按照手册availible here的定义,一个因素是
因子是向量对象,用于指定相同长度的其他向量的成分的离散分类(分组)
基本上,如果您有向量c("A", "B", "A", "C")
,则可以是character
向量,也可以将其映射为给定"A"
值为1的因数(首先出现) ),"B"
的值为2,而"C"
的值为3。可以更改分配的这些值,但这并不重要。正在运行
factorVector <- c("A", "B", "A", "C")
class(factorVector) #[1] "character"
as.numeric(factorVector) #[1] NA NA NA NA + 1 warning
factorVector <- factor(factorVector)
class(factorVector) #[1] "factor"
as.numeric(factorVector) #[1] 1 2 1 3
说明此属性以及R中的因子和字符之间的关键区别。
请注意,当我尝试将字符向量转换为数字时,它如何返回NA
并引发错误,而因数却为factorVector
中的每个唯一实例唯一地返回一个数字。
要注意的重要一件事是,当一个人从*.txt
或*.csv
文件中导入数据时,这可能会影响数据的导入方式。例如,read.table(----)
对文件中的逗号分隔敏感。在丹麦,小数点用逗号(,
)标记,而列用分号(;
)分隔。大多数实现都将逗号标准化为列分隔符,并将点(.
)标准化为小数点,因此丹麦文文件将
,
标识为列分隔符,则可能会错误地分隔列;
作为列分隔符,但将.
保留为小数点,则可以将十进制数字转换为字符串,因为未将真正的十进制标记(,
)标识为是十进制。因此,在导入和设置sep
(列分隔符)和dec
(小数点符号)并通过{{ 1}}或同等功能。例如,read.table
将正确读取丹麦文件格式。
似乎您的文件中包含的数字可能没有标准的read.csv("dataFile.txt", sep = ";", dec = ",")
作为小数点。在执行计算之前,请确保检查数据是否正确导入。