【问题标题】:R help converting non numeric column to numericR帮助将非数字列转换为数字
【发布时间】:2018-10-21 07:08:59
【问题描述】:

我正试图帮助我的朋友销售总监了解他记录的通话数据。他特别感兴趣的一栏是“性格”。此列具有字符串值,我正在尝试将它们转换为数值(即“未回答”转换为 1,“已回答”转换为 2,等等)并删除任何未输入值的行。我创建了数据框,用作.numeric,创建和删除了列/行等,但无济于事。我只是想运行简单的 R 代码给他一些洞察力。非常感谢任何和所有帮助。提前致谢!

附:由于存在大量敏感信息(个人电话号码和电子邮件),我不确定是否应该提供一些代码。

【问题讨论】:

  • 我想说你应该看看?factor。否则,构建一个查找表(作为命名向量)。 this post 可能值得一读。除此之外,请提供一个可重现的示例。否则,可能很难提供帮助。如果您无法共享实际数据,您可能会将一些虚拟数据放在一起。
  • 一些可以用来制作假数据的包:generatorwakefieldcharlatan

标签: r dataframe type-conversion


【解决方案1】:

首先:您应该始终提供有代表性的样本数据;如果您的数据本质上是敏感数据,请提供模型数据。

除此之外,要将character 向量重新编码为numeric,您可以转换为factor,然后使用as.numeric。例如:

# Sample data
column <- c("Not Answered", "Answered", "Something else", "Others")

# Convert character vector to factor
column <- factor(column, levels = as.character(unique(column)))

# Convert to numeric
as.numeric(column);
#[1] 1 2 3 4

可以通过更改因子levels 的顺序来调整编号。

【讨论】:

    【解决方案2】:

    或者,您可以创建一个新列并使用ifelse 语句用数值填充它。为了说明,让我们假设这是您的数据框:

    df <- data.frame(
      Disposition = c(rep(c("answer", "no answer", "whatever", NA),3)),
      Anything = c(rnorm(12))
    )
    df
    
       Disposition    Anything
    1       answer  2.54721951
    2    no answer  1.07409803
    3     whatever  0.60482744
    4         <NA>  2.08405038
    5       answer  0.31799860
    6    no answer -1.17558239
    7     whatever  0.94206106
    8         <NA>  0.45355501
    9       answer  0.01787330
    10   no answer -0.07629330
    11    whatever  0.83109679
    12        <NA> -0.06937357
    

    现在您定义一个新列,例如 df$Analysis,并根据 df$Disposition 中的信息为其分配编号:

    df$Analysis <- ifelse(df$Disposition=="no answer", 1,
                          ifelse(df$Disposition=="answer", 2, 3))
    df
    
          Disposition    Anything Analysis
    1       answer  2.54721951        2
    2    no answer  1.07409803        1
    3     whatever  0.60482744        3
    4         <NA>  2.08405038       NA
    5       answer  0.31799860        2
    6    no answer -1.17558239        1
    7     whatever  0.94206106        3
    8         <NA>  0.45355501       NA
    9       answer  0.01787330        2
    10   no answer -0.07629330        1
    11    whatever  0.83109679        3
    12        <NA> -0.06937357       NA
    

    这种方法的好处是可以保持原始信息不变。如果您现在要删除数据框中的 Na 值,请使用 na.omit。注意:这不仅会删除 df$Disposition 中的 NA 值,还会删除 any row 与 NA 在任何列中:

    df_clean <- na.omit(df)
    df_clean
    
       Disposition    Anything Analysis
    1       answer  2.5472195        2
    2    no answer  1.0740980        1
    3     whatever  0.6048274        3
    5       answer  0.3179986        2
    6    no answer -1.1755824        1
    7     whatever  0.9420611        3
    9       answer  0.0178733        2
    10   no answer -0.0762933        1
    11    whatever  0.8310968        3
    

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 2015-02-03
      • 2021-07-01
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      相关资源
      最近更新 更多