很抱歉,如果这是一个琐碎的问题或没有道理,这是我的第一篇文章。我来自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
“ x”中的ID
和B=1
“ x + 1”中的ID
,则在ID为“ x”的新列C中为= 1 = 0。如果可以简化事情,我可以按ID排序,但是最好通过ID列来完成。
到目前为止,我已经尝试过ifelse语句,但我想可能会有更好的方法
答案 0 :(得分:0)
使用dplyr
,我们可以使用lead
通过ID
整理数据后获取下一个元素。
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))
答案 1 :(得分:0)
使用Lead函数可以使它工作
df <-df [order(df $ ID),]
df $ C <-ifelse(df $ A == 1&Lead(df $ B)== 1,1,0)