重新索引和填充 R 数据帧

标签 r dataframe data-manipulation

我有一个看起来像这样的 R 数据框

1  A   1
2  A   0.9
5  A   0.7
6  A   0.6
8  A   0.5
3  B   0.6
4  B   0.5
5  B   0.4
6  B   0.3

我需要填补所有空白,直到达到每个类别的最大值(第二列)。 即我希望获得的结果如下

1  A  1
2  A  0.9
3  A  0.9
4  A  0.9
5  A  0.7
6  A  0.6
7  A  0.6
8  A  0.5
1  B  0.6
2  B  0.6
3  B  0.6
4  B  0.5
5  B  0.4
6  B  0.3

基本上,当第一个 obs 之前有缺失数据时向后填充,当缺失数据介于两者之间时向前填充。 我所做的是按猫分组

 groupby = ddply(df, ~fit$group,summarise, max=max(time))

A  8
B  6

但现在我陷入了下一步。

最佳答案

我们可以尝试使用data.table/zoo。将 'data.frame' 转换为 'data.table' (setDT(df1)),根据按 ' 分组的 max 值的顺序展开 'v1' 列v2',将 on 与 'v1' 和 'v2' 连接起来,然后按 'v2' 分组,我们使用 na.locf(来自 动物园)

library(data.table)
library(zoo)
setDT(df1)[df1[, .(v1=seq_len(max(v1))), v2], on = c('v1', 'v2')
  ][, v3 := na.locf(na.locf(v3, na.rm = FALSE), fromLast=TRUE), by = v2][]
#     v1 v2  v3
# 1:  1  A 1.0
# 2:  2  A 0.9
# 3:  3  A 0.9
# 4:  4  A 0.9
# 5:  5  A 0.7
# 6:  6  A 0.6
# 7:  7  A 0.6
# 8:  8  A 0.5
# 9:  1  B 0.6
#10:  2  B 0.6
#11:  3  B 0.6
#12:  4  B 0.5
#13:  5  B 0.4
#14:  6  B 0.3

或者使用dplyr/zoo

library(dplyr)
library(zoo)
library(tidyr)
df1 %>%
    group_by(v2) %>% 
    expand(v1 = seq_len(max(v1))) %>%
    left_join(., df1) %>%
    mutate(v3 =  na.locf(na.locf(v3, na.rm = FALSE), fromLast=TRUE)) %>%
    select(v1, v2, v3)
#    v1    v2    v3
#   <int> <chr> <dbl>
#1      1     A   1.0
#2      2     A   0.9
#3      3     A   0.9
#4      4     A   0.9
#5      5     A   0.7
#6      6     A   0.6
#7      7     A   0.6
#8      8     A   0.5
#9      1     B   0.6
#10     2     B   0.6
#11     3     B   0.6
#12     4     B   0.5
#13     5     B   0.4
#14     6     B   0.3

数据

df1 <- structure(list(v1 = c(1L, 2L, 5L, 6L, 8L, 3L, 4L, 5L, 6L), v2 = c("A", 
"A", "A", "A", "A", "B", "B", "B", "B"), v3 = c(1, 0.9, 0.7, 
0.6, 0.5, 0.6, 0.5, 0.4, 0.3)), .Names = c("v1", "v2", "v3"),
 class = "data.frame", row.names = c(NA, -9L))

关于重新索引和填充 R 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41447329/

相关文章:

python - 在 pandas 数据框中组合 groupby 后创建共享变量

r - 删除R中的连续空行

r - 使用 dplyr 编写函数时的惰性求值

r - 如何在 R testthat 中同时测试消息和错误消息?

r - 按行添加值并将它们应用于单行变量,同时保留其他变量和行

python - Pandas read_csv() 损失数字精度

r - 使用 stargazer 分析包含时间序列的数据帧

r - 使用类别增长率填充 data.table 中的缺失值

r - 根据列中的条件为组分配值

r - R中树状图中的着色分支