如何将值传播到空白""在另一列R的特定组内

时间:2018-03-17 01:12:06

标签: r dplyr zoo

我已经检查了一些类似的问题,给出了这个方法: 转换空白""通过na.strings = ("")>到NA library(zoo)> na.locf() 它不适用于下面的分组情况

df <- read.table(header = T,text = 'Int.Index Int.Line Name Index Index.Line Amount
       340        1 John   440          1    700
        NA        2 John   440          2    100
        NA        3 John   400          3     50
       450        1  May   500          1   2401
      5694        1 Paul  6023          1   1312
        NA        2 Paul  6023          2   7244
        NA        1 Tom   7889          1    221
        NA        2 Tom   7889          2   2114
        NA        1 Joe    231          1   1349
      3455        1 Ben   3330          1   1353
        NA        2 Ben   3330          2   8651')

目标结果

df_result <- read.table(header = T,text = '
    Int.Index Int.Line Name Index Index.Line Amount
       340        1 John   440          1    700
       340        2 John   440          2    100
       340        3 John   400          3     50
       450        1  May   500          1   2401
      5694        1 Paul  6023          1   1312
      5694        2 Paul  6023          2   7244
        NA        1 Tom   7889          1    221
        NA        2 Tom   7889          2   2114
        NA        1 Joe    231          1   1349
      3455        1 Ben   3330          1   1353
      3455        2 Ben   3330          2   8651')

没有$Int.Index的另一个群组之间的Tom群组和Joe群组将错误地传播应该将其保留为空白&#34;&#34; 。 $Index代表群组,$Index.Line代表每个群组的行。

1 个答案:

答案 0 :(得分:1)

根据这个例子,我们可以按名称&#39;分组。然后执行library(tidyverse) df %>% mutate(rn = row_number()) %>% group_by(Name) %>% fill(Int.Index) %>% arrange(rn) %>% select(-rn) # A tibble: 11 x 6 # Groups: Name [6] # Int.Index Int.Line Name Index Index.Line Amount # <int> <int> <fctr> <int> <int> <int> # 1 340 1 John 440 1 700 # 2 340 2 John 440 2 100 # 3 340 3 John 400 3 50 # 4 450 1 May 500 1 2401 # 5 5694 1 Paul 6023 1 1312 # 6 5694 2 Paul 6023 2 7244 # 7 NA 1 Tom 7889 1 221 # 8 NA 2 Tom 7889 2 2114 # 9 NA 1 Joe 231 1 1349 #10 3455 1 Ben 3330 1 1353 #11 3455 2 Ben 3330 2 8651

{{1}}

注意:使用&#39;索引&#39;因为小组会将第三次观察分类为一个单独的单位,因为它是400而不是440.