【问题标题】:How to assign one dataframe column's value to be the same as another column's value in r?如何将一个数据框列的值分配为与 r 中另一列的值相同?
【发布时间】:2021-12-30 22:27:52
【问题描述】:

我正在尝试运行下面的这行代码以将 city.output 列复制到 pm.city 中,它不是 NA(在我的示例数据框中,虽然没有 NA),因为 city.output 包含正确的城市拼写。

resultdf <- dplyr::mutate(df, pm.city = ifelse(is.na(city.output) == FALSE, city.output, pm.city))

df:

  pm.uid pm.address                   pm.state pm.zip pm.city     city.output
   <int> <chr>                        <chr>    <chr>  <chr>       <fct>
1      1 1809 MAIN ST                 OH       63312  NORWOOD     NORWOOD
2      2 123 ELM DR                   CA       NA     BRYAN       BRYAN
3      3 8970 WOOD ST UNIT 4          LA       33333  BATEN ROUGE BATON ROUGE
4      4 4444 OAK AVE                 OH       87481  CINCINATTI  CINCINNATI
5      5 3333 HELPME DR               MT       87482  HELENA      HELENA
6      6 2342 SOMEWHERE RD            LA       45103  BATON ROUGE BATON ROUGE

resultdf(pm.city 应该和 city.output 一样,但它是一个整数)

  pm.uid pm.address                   pm.state pm.zip pm.city city.output
   <int> <chr>                        <chr>    <chr>    <int> <fct>
1      1 1809 MAIN ST                 OH       63312        7 NORWOOD
2      2 123 ELM DR                   CA       NA           2 BRYAN
3      3 8970 WOOD ST UNIT 4          LA       33333        1 BATON ROUGE
4      4 4444 OAK AVE                 OH       87481        3 CINCINNATI
5      5 4444 HELPME DR               MT       87482        4 HELENA
6      6 2342 SOMEWHERE RD            LA       45103        1 BATON ROUGE

一个整数被分配给 pm.city。看起来整数是按字母顺序排列的城市的顺序号。在此之前,我使用 dplyr left_join 方法从另一个数据帧附加 city.output 列,但即使在那里,也没有我明确提供的行号。

这适用于我在 r studio 中的计算机上,但当我从服务器运行它时却不行。也许它与我的 dplyr 版本或 city.output 下的因子数据类型有关?我对 r 很陌生。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    city.outputfactor,它被强制转换为整数存储值。相反,使用as.character 转换为character

    dplyr::mutate(df, pm.city = ifelse(!is.na(city.output), as.character(city.output), pm.city))
    

    【讨论】:

    • 这成功了!谢谢你。这就是我通过 r 进行黑客攻击所得到的。仍然困惑为什么这段代码在我的计算机上与服务器上的工作方式不同,但也许我确实做了一些不同的事情,所以它不是我计算机上的因素数据类型。需要对此进行调查。
    • @Kelly 与您的计算机相比,服务器中的列类型可能是 character,反之亦然。我建议在进行任何计算之前使用str(df) 进行一些检查以打印
    • 再次在本地尝试,是的,它是 数据类型而不是 。希望我明白为什么它在那里不同,但我可能不会花更多时间在它上面
    • 我撒了谎,花了更多时间在这上面。在您的 R 文件(在 library/base/R 中)的 Rprofile 文件中有一个设置,其中有选项(stringsAsFactors = TRUE),或者在我的机器上为 FALSE。两台机器有不同的设置。
    • @Kelly 那只是因为stringsAsFactors = FALSE默认来自R 4.0,当您使用read.table/read.csv读取数据或使用data.frame创建数据4.0之前,默认为TRUE环境。因此,我假设您的 R 版本在两者中都不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多