查找满足特定条件的数据框中的最后一行

时间:2015-03-29 10:46:53

标签: r select dataframe

我正在寻找一种方法来引用我的数据框中的一个明显的行,该行具有与“当前行”相同的一个列值。基本上,如果这是我的数据框

 A  B   D    
 1  10      
 4  5       
 6  6       
 3  25      
 1  40      

我希望D(i)包含A与A(i)具有相同值的最后一行的B值。所以对于应该是10的最后一行。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

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")

答案 1 :(得分:1)

您可以尝试

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))