我正尝试填充数据框的缺失ID列,如下所示。在它适用的第一行中,它不是空白,然后是空白,直到下一个ID。我编写了一个丑陋的代码来在for
循环中执行此操作,但想知道是否有一种更整洁的方法来执行此操作。有什么建议吗?
这就是我所拥有的:
code data
1 A 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 B 11
12 12
13 13
14 14
15 15
16 C 16
17 17
18 18
19 19
20 20
我想要:
code data
1 A 1
2 A 2
3 A 3
4 A 4
5 A 5
6 A 6
7 A 7
8 A 8
9 A 9
10 A 10
11 B 11
12 B 12
13 B 13
14 B 14
15 B 15
16 C 16
17 C 17
18 C 18
19 C 19
20 C 20
我现在得到的代码:
# Create mock data frame
df <- data.frame(code = c("A", rep("", 9),
"B", rep("", 4),
"C", rep("", 4)),
data = 1:20)
# For loop over rows (BAD!)
for (i in seq(2, nrow(df))) {
df[i,]$code <- ifelse(df[i,]$code == "", df[i-1,]$code, df[i, ]$code)
}
答案 0 :(得分:2)
有一种tidyr
方法,有fill
函数。您还需要用NA
替换零长度的字符串,这样才能正常工作,您可以使用mutate
中的na_if
和dplyr
函数轻松地做到这一点。
df %>%
mutate(code = na_if(code,"")) %>%
fill(code)
code data
1 A 1
2 A 2
3 A 3
4 A 4
5 A 5
6 A 6
7 A 7
8 A 8
9 A 9
10 A 10
11 B 11
12 B 12
13 B 13
14 B 14
15 B 15
16 C 16
17 C 17
18 C 18
19 C 19
20 C 20