r语言 - 根据其他列中的值计算第三列中的值,但不同行



对不起,如果这是一个微不足道的问题或没有意义,这是我的第一篇文章。我来自 Excel,在那里我使用 if 语句和索引匹配函数,并尝试在 R 中做类似的事情以从两列中提取数据,但不一定是同一行来获取第三列中的值,我的例子是这样的

df<-data.frame(ID=c(1,5,4,2,3),A=c(1,0,1,1,1),B=c(0,0,1,0,0))

期望输出: df<-data.frame(ID=c(1,5,4,2,3(,A

=c(1,0,1,1,1(,B=c(0,0,1,0,0(,C=c(0,0,0,0,1((我想要的是创建基本上遵循以下格式的第三列"C":

Ifelse(A[ID]=1 & B[ID+1]=1 , C[ID]=1 , C[ID]=0)

本质上,如果A=1ID"x"中,B=1ID"x+1",那么在新列 C 中 ID "x" =1 否则 =0。如果这样可以使事情变得更容易,我可以按 ID 对所有内容进行排序,但按 ID 列进行排序将是理想的。

到目前为止,我已经尝试了ifelse语句,但我想可能有更好的方法来做到这一点

使用dplyr时,我们可以在按ID排列数据后使用lead来获取下一个元素。

library(dplyr)
df %>%
arrange(ID) %>%
mutate(C = as.integer(A == 1 & lead(B) == 1))
#  ID A B C
#1  1 1 0 0
#2  2 1 0 0
#3  3 1 0 1
#4  4 1 1 0
#5  5 0 0 0

在基数R中,我们可以做

df1 <- df[order(df$ID),]
df1$C <- with(df1, c(A[-nrow(df)] == 1 & tail(B, -1) == 1, 0))

在不排列数据的情况下,我们可能可以做到

transform(df, C = as.integer(A[ID] == 1 & B[match(ID + 1, ID)] == 1))

使用铅功能我让它工作

df <- df [order(df$ID(, ]

df$C <- ifelse (df$A == 1 & lead (df$B( == 1, 1, 0(

最新更新