我正在寻找一种方法来引用我的数据帧中的前一行,该行与"当前行"有一个共同的列值。基本上,如果这是我的数据帧
A B D
1 10
4 5
6 6
3 25
1 40
我希望D(I)包含最后一行的B值,其中A的值与A(I)的值相同。最后一行应该是10。
你可以试试这个:
for(i in seq_len(nrow(dat))) {
try(dat$D[i] <- dat$B[tail(which(dat$A[1:i-1] == dat$A[i]),1)],silent=TRUE)
}
结果:
> dat
A B D
1 1 10 NA
2 4 5 NA
3 6 6 NA
4 3 25 NA
5 1 40 10
数据:
dat <- read.csv(text="A,B,D
1,10
4,5
6,6
3,25
1,40")
您可以尝试
library(dplyr)
df1%>%
group_by(A) %>%
mutate(D=lag(B))
# A B D
#1 1 10 NA
#2 4 5 NA
#3 6 6 NA
#4 3 25 NA
#5 1 40 10
或
library(data.table)#data.table_1.9.5
setDT(df1)[, D:=shift(B), A][]
数据
df1 <- structure(list(A = c(1L, 4L, 6L, 3L, 1L), B = c(10L, 5L, 6L,
25L, 40L)), .Names = c("A", "B"), class = "data.frame",
row.names = c(NA, -5L))