2

我正在尝试执行一个非常简单的数据完成:我在相距几英里的两个不同位置进行了两列相同的测量。位置 1 比位置 2 更完整,我想通过将系数 (loc1/loc2) 应用于 1 来完成第二个和第一个。

我的问题是天气值会随着考虑的日期而变化,因此对我的所有值应用相同的平均系数并不理想。我首先通过 loc1 和日期的值得到平均系数,但是对于没有 loc2 值的日子,我想:

  • 用相同 loc1 值计算的 coef 替换“coef”值中的 NA
  • 但有时每个 loc1 值的 coef 不止一个,所以当有多个时,它会优先是同一天测量的那个
  • 并且当一个 loc1 值根本没有 coef 值时,coef 将与该 loc1 值相同 +/- 一个间隔(最接近的 loc1 值在最接近要完成的日期的 coef)这里是这样的:

      loc1 Date      Coef   loc2
    1      12 204        3      4
    2      8  147        4      2
    3      8  204        NA    NA
    4      10 147        NA    NA
    5      10 158        NA    NA
    6      6  159        3      2
    7      6  162        NA    NA
    8      6  170        2      3
    9      .3 175 0.4833333 0.145
    10     0.3 204        NA    NA
    11     0.4 146        NA    NA
    12     0.4 147        NA    NA
    

我很确定有一种简单的方法可以做到这一点,但是由于我对 ifelse 或 ddply 的了解有限,我最终并没有更接近我想要的。我觉得循环可以解决问题,但我不知道如何..

任何想法将不胜感激!提前谢谢了 !

4

1 回答 1

0

我不完全理解您在第 3 条中的意思:

当一个 loc1 值根本没有 coef 值时,coef 将与该 loc1 值相同 +/- 一个间隔(最接近的 loc1 值在最接近要完成的日期的 coef)

所以我对那部分没有答案,但这可能会让你有一些方法:


library(dplyr)

df <- tibble::tribble(
  ~loc1, ~Date,     ~Coef, ~loc2,
  12,  204L,         3,     4,
  8,  147L,         4,     2,
  8,  204L,        NA,    NA,
  10,  147L,        NA,    NA,
  10,  158L,        NA,    NA,
  6,  159L,         3,     2,
  6,  162L,        NA,    NA,
  6,  170L,         2,     3,
  3,  175L, 0.4833333, 0.145,
  0.3,  204L,        NA,    NA,
  0.4,  146L,        NA,    NA,
  0.4,  147L,        NA,    NA
)

df %>% 
  # Replace Coef with the coef of same loc1 and same day
  group_by(loc1, Date) %>% 
  mutate(Coef = if_else(!is.finite(Coef), mean(Coef, na.rm = TRUE), Coef)) %>% 
  # For ones without same day and loc1, use the average of all days at loc1
  group_by(loc1) %>% 
  mutate(Coef = if_else(!is.finite(Coef), mean(Coef, na.rm = TRUE), Coef)) %>% 
  ungroup() %>% 
  # Then complete the loc2 with using the completed Coef and loc1
  mutate(loc2 = if_else(!is.finite(loc2), loc1 * Coef, loc2))

#> # A tibble: 12 x 4
#>     loc1  Date      Coef   loc2
#>    <dbl> <int>     <dbl>  <dbl>
#>  1  12.0   204 3.0000000  4.000
#>  2   8.0   147 4.0000000  2.000
#>  3   8.0   204 4.0000000 32.000
#>  4  10.0   147       NaN    NaN
#>  5  10.0   158       NaN    NaN
#>  6   6.0   159 3.0000000  2.000
#>  7   6.0   162 2.5000000 15.000
#>  8   6.0   170 2.0000000  3.000
#>  9   3.0   175 0.4833333  0.145
#> 10   0.3   204       NaN    NaN
#> 11   0.4   146       NaN    NaN
#> 12   0.4   147       NaN    NaN
于 2017-05-27T23:41:50.367 回答