【问题标题】:How to fill a section of a column with already existing values corresponding to another column in R?如何用对应于 R 中另一列的现有值填充列的一部分?
【发布时间】:2021-02-21 20:16:22
【问题描述】:

我正在处理一些飞行轨迹的清洁数据,“呼号”是我需要填写的必填字段。

Section of the csv I am working with

我正在处理的数据有近 300000 行,而且这个空白呼号问题非常重复。有什么方法可以根据对应的 icao24 识别号填写这些呼号?

我尝试使用 tapply() 函数根据它们的 icao24 编号分割数据,并将函数应用于每个块,即。

tapply(myDF$callsign, myDF$icao24, ...)

但我似乎无法理解我将应用于每个部分的“功能”,因为它们的名称不同。我是否需要在每个部分上使用某种循环迭代,并将 tapply() 应用于每个部分?

【问题讨论】:

    标签: r data-cleaning tapply


    【解决方案1】:

    如果值为空白 (""),则使用非空白“呼号”的 first 元素对属于 "" 的元素执行 group_by 'icao24' 和 replace

    library(dplyr)
    df2 <- df1%>%
       group_by(icao24) %>%
       mutate(callsign = replace(callsign, callsign == "", 
                first(callsign[callsign != ""])))
    

    另一个选项是fill,将空白转换为NA

    library(tidyr)
    df2 <- df1 %>%
       mutate(callsign = na_if(callsign, "")) %>%
       group_by(icao24) %>%
       fill(callsign)
    

    【讨论】:

    • 谢谢。我已经在整个数据框中运行了代码和输出结果。有没有办法将它存储在新的数据框中或替换已经存在的列?
    • @KarthikUppuluri 您可以将df2 &lt;- df1 %&gt;% ... 分配给不同的对象或相同的对象
    • 我已经运行了代码,在查看了我的新数据框之后,似乎列中的所有空白元素都已替换为呼号的第一个元素(非空白)而不是相应的周围呼号。如何将这指定给 R 我需要替换周围的元素?
    • @KarthikUppuluri 这是第一个案例的代码。如果是相邻元素,那么带有fill 的第二个代码块应该可以工作
    猜你喜欢
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2022-08-23
    • 2021-09-05
    相关资源
    最近更新 更多