根据 R 中的第二列填充列的空格

Fill a column's blank spaces contingent on a second column in R

我很感激这方面的帮助。我有一些类似于下面的数据。

df$A df$B
1    .
1    .
1    .
1    6
2    .
2    .
2    7

我需要做的是在 df$B 中填写对应于 df$A 中 运行 个值末尾的每个值。示例如下。

df$A df$B
1    6
1    6
1    6
1    6
2    7
2    7
2    7

欢迎任何帮助。

在我看来,缺失值用 . 表示。最好用 na.strings="." 读取数据集,这样缺失值将是 NA。对于当前数据集,'B' 列将是 character/factor class(取决于您是否在 read.table/read.csv.[=31= 中使用 stringsAsFactors=FALSE/TRUE(默认值) ]

使用data.table,我们将data.frame转换为data.tablesetDT(df1)),将'character' class更改为'numeric'(B:= as.numeric(B))。这也将导致将 . 强制转换为 NA(将出现警告)。按 "A" 分组,我们将 "B" 值更改为最后一个元素 (B:= B[.N])

library(data.table)
setDT(df1)[,B:= as.numeric(B)][,B:=B[.N] , by = A]
#   A B
#1: 1 6
#2: 1 6
#3: 1 6
#4: 1 6
#5: 2 7
#6: 2 7
#7: 2 7

dplyr

library(dplyr)
df1 %>%
     group_by(A) %>%
     mutate(B= as.numeric(tail(B,1)))

或使用 base R

中的 ave
df1$B <- with(df1, as.numeric(ave(B, A, FUN=function(x) tail(x,1))))

数据

df1 <- structure(list(A = c(1L, 1L, 1L, 1L, 2L, 2L, 2L), B = c(".", 
".", ".", "6", ".", ".", "7")), .Names = c("A", "B"), 
class = "data.frame", row.names = c(NA, -7L))