【问题标题】:NA's After pivot_wider in RNA 在 R 中的 pivot_wider 之后
【发布时间】:2021-06-05 21:59:57
【问题描述】:

我看过一些关于我的问题的帖子,但我认为我的问题有点不同。我试图遵循解决方案,但都无济于事。 最初,我为176 column 的数据集做了一个pivot_longer,当我做summary(df) 时没有NA。 pivot_longer 之后的数据集如下所示:


region transportation_type country date value

Albania driving Albania 2020-01-13  100.00
Albania driving Albania 2020-01-14  95.30
Albania driving Albania 2020-01-15  101.43
Albania driving Albania 2020-01-16  97.20
Albania driving Albania 2020-01-17  103.55
Albania driving Albania 2020-01-18  112.67

但是,我需要使用 countryregion 分析 transportation_type,所以我使用以下代码进行了 pivot_wider

p_wide <- mobilityTrendData %>% 
    group_by(transportation_type) %>%
    mutate(row = row_number()) %>%
    pivot_wider(names_from = transportation_type, 
                values_from = daily_result) %>%
    select(-row)

注意:列名 'value' 已更改为 'daily_result' 并且数字已经是 scaled 来自 value

结果如下:

> summary(p_wide)
    region            country              date              driving         walking      
 Length:598230      Length:598230      Length:598230      Min.   :-2.09   Min.   :-2.1    
 Class :character   Class :character   Class :character   1st Qu.:-0.46   1st Qu.:-1.0    
 Mode  :character   Mode  :character   Mode  :character   Median : 0.00   Median :-0.3    
                                                          Mean   : 0.10   Mean   :-0.4    
                                                          3rd Qu.: 0.49   3rd Qu.: 0.1    
                                                          Max.   :25.60   Max.   :10.6    
                                                          NA's   :80070   NA's   :537880  
    transit      
 Min.   :-2.1    
 1st Qu.:-1.4    
 Median :-0.8    
 Mean   :-0.7    
 3rd Qu.:-0.1    
 Max.   : 5.2    
 NA's   :560490 

我在 drivingwalkingtransit 的大部分行中都有 NA。 什么可以导致完全知道在以前的数据集中没有 NA?

我该如何解决这个问题?

【问题讨论】:

  • 我在答案中选择了 Andy Eggers 的解释。当您pivot_wider() 时,标题将基于您突破的列的所有组合。检查您的long tibble,每个国家/地区每天都有每个活动(步行、驾驶、过境)的条目。我很确定 NA 来自 missing 条目。请注意,如果您在 pivot_longer 之后通过插补更正 NA,这并不能确保您拥有所有组合的条目。这是您需要检查(和估算)的东西。正如安迪所说:你看到的是数据的特征!

标签: r dplyr pivot tidyr


【解决方案1】:

假设您有一个日期和一个地区/国家/地区组合,其中您有 driving 的值,但没有 walking 的值。那么当你pivot_wider 时,你应该有NA 对应walking。长数据集中没有NA,但实际上缺少一行。

至于如何解决这个问题:如果我正确理解了这个问题,那么修复不是问题,而是数据的一个特征。

PS:我不明白您为什么要执行 group_by() 操作,或者为什么要创建然后删除 row 变量。如果我遗漏了什么,我怀疑这是group_by()pivot_wider() 的影响。

【讨论】:

  • 最初,当我加载数据集 R 时,我的数据集的数字列中有缺失值。我用以下代码用 NA 替换了缺失值:mobilityTrendData[mobilityTrendData ==""]&lt;-NApivot_longer 之后,我替换了 NA平均而言,这段代码:mobilityTrendData$daily_result[is.na (mobilityTrendData$daily_result)]&lt;- mean(mobilityTrendData$daily_result, na.rm = T)。我使用了group_by(),因为我希望drivingwalkingtransit 分别有一个单独的列和值。我放弃了row,因为我认为我不需要它。我需要一种更好的方法来做到这一点
  • 我删除了group_by () 我运行了这样的代码:p_wide&lt;-mobilityTrendData %&gt;% mutate(row = row_number())%&gt;%pivot_wider(names_from = transportation_type, values_from = daily_result) %&gt;% select(-row)。我在walkingdrivingtransit 列中仍然有 NA。我担心的是为什么我在pivot_wider 中有NA,而pivot_longer 数据集中没有NA?同样,如果我不添加这个mutate(row = row_number()),我将在walkingdrivingtransit 的所有列中得到像&lt;dbl [170]&gt; &lt;NULL&gt; &lt;NULL&gt; 这样的非常糟糕的输出。我的目标是没有 NA。
猜你喜欢
  • 1970-01-01
  • 2020-03-09
  • 2021-12-22
  • 1970-01-01
  • 2021-04-15
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多