对不起,如果这是一个微不足道的问题或没有意义,这是我的第一篇文章。我来自 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=1
ID
"x"中,B=1
ID
"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(