繁体   English   中英

比较多个列并在 R 中创建新列

[英]Compare multiple columns and create new ones in R

我在重复的开始(A)和结束(B)处有一个大的测量数据数据集。 现在我想将我的数据行排序为“出现在最后”(出现)和“仍然存在”(存在)并将数据传递到新列中。

data<-data.frame(A1=c(1,2,4),
   A2=c(3,5,4),
   B1=c(10,0,5),
   B2=c(1,0,1))

所需的 output:

data_res<-data.frame(A1=c(1,2,4,0),
                 A2=c(3,5,4,0),
                 B1=c(10,0,5,1),
                 B2=c(1,0,1,2),
                 appeared1=c(0,0,0,1),
                 appeared2=c(0,0,0,2),
                 present1=c(10,0,5,0),
                 present2=c(1,0,1,0))

如您所见,如果Data最后出现,我希望B的output在多列中,如果不是零应该传递。 如果数据仍然存在,我还需要 B 的 output,如果不是零的话。 感谢帮助!

您可以使用dplyr来做到这一点:

library(dplyr)
data<-data.frame(A1=c(1,2,4,0),
                 A2=c(3,5,4,0),
                 B1=c(10,0,5,1),
                 B2=c(1,0,1,2))

out<- mutate(data, appeared1 = if_else(A1 == 0, if_else(B1 != 0, B1, 0), 0))
out<- mutate(out, appeared2 = if_else(A2 == 0, if_else(B2 != 0, B2, 0), 0))
out<- mutate(out, present1 = if_else(A1 != 0, if_else(B1 != 0, B1, 0), 0))
out<- mutate(out, present2 = if_else(A2 != 0, if_else(B2 != 0, B2, 0), 0))

Output:

> out
  A1 A2 B1 B2 appeared1 appeared2 present1 present2
1  1  3 10  1         0         0       10        1
2  2  5  0  0         0         0        0        0
3  4  4  5  1         0         0        5        1
4  0  0  1  2         1         2        0        0

如果您有更多列,则可以使用 for 循环:

out <- data
for (i in 1:2){
  var1 = paste0('appeared',i)
  var2 = paste0('present',i)
  Ai <- paste0('A',i)
  Bi <- paste0('B',i)
  out<- mutate(out,  !!var1 := if_else( !!sym(Ai) == 0, if_else(!!sym(Bi) != 0, !!sym(Bi), 0), 0))
  out<- mutate(out, !!var2 := if_else(!!sym(Ai) != 0, if_else(!!sym(Bi)!= 0, !!sym(Bi), 0), 0))
}

请记住根据您拥有的复制数量更改 for 循环中的范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM