【问题标题】:Divide a column by a number [duplicate]将一列除以一个数字[重复]
【发布时间】:2019-09-14 03:51:12
【问题描述】:

我想将一列的所有值除以 3。

当我这样做时

x$V2/3

它返回一个对因子没有意义的错误'/'

当我这样做时 - as.numeric(x$V2)/3

ex :- 39/3 - 3.3333333 而不是 13。

我不确定出了什么问题。你能帮忙吗?

【问题讨论】:

  • class(x$V2)检查该列的类是什么
  • 试试as.numeric(as.character(x$V18))/3
  • 完美!非常感谢LocoGris
  • 您收到的第一个错误表明x$V2 是一个因素。当您导入数据时,请使用stringsAsFactors=FALSE,这将确保它不会被作为因素读入。但是您可能在数据中有一些不是数字的值,因此请同时查找并根据需要进行清理

标签: r


【解决方案1】:

一个快速的答案,虽然这在 cmets 中已部分解决。

正如 Infominer 所建议的,您得到的错误是您尝试除以 3 的列实际上是一个因素。按照手册availible here的定义,一个因素是

因子是一个向量对象,用于指定相同长度的其他向量的分量的离散分类(分组)

基本上,如果您有一个向量c("A", "B", "A", "C"),它可以是一个character 向量,也可以映射为一个因子,使"A" 的值为1(因为它首先出现),"B" a值 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(----) 对文件中的逗号分隔很敏感。在丹麦,小数点用逗号 (,) 标记,而列用分号 (;) 分隔。大多数实现将逗号标准化为列分隔符,将点 (.) 标准化为小数点,因此丹麦文件将

  1. 如果将 , 标识为列分隔符,则可能会错误地分隔列
  2. 如果它确实找到; 作为列分隔符但保留. 作为小数点,十进制数字可以转换为字符串,因为真正的十进制标记 (,) 未被识别为小数。李>

因此,在通过read.table 或等效方法导入数据时,在导入和设置sep(列分隔符)和dec(小数点符号)时,了解文件的设置方式非常重要.例如read.csv("dataFile.txt", sep = ";", dec = ",") 将正确读取丹麦文件格式。

您的文件似乎包含可能没有标准 . 作为小数标记的数字。请确保在执行计算之前检查您的数据是否正确导入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多