我已经检查了一些类似的问题,给出了这个方法:
转换空白""通过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
代表每个群组的行。
答案 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.