gpt4 book ai didi

R基于ifelse的dafaframe的所有组合

转载 作者:行者123 更新时间:2023-12-01 10:00:12 25 4
gpt4 key购买 nike

我在这里遇到以下问题:我有一个看起来像这样的数据框:

  aa<-c(0,0,0,1,1,0,0)
bb<-c(1,1,0,0,1,0,1)
cc<-c(0,1,0,0,0,1,0)

d<-data.frame(aa,bb,cc)

数据总是二进制的,并且是缺席/在场数据的代码。我想要的是新列,其中包含满足某些假设的变量的所有可能组合。对于这个数据框,它就像

d$aabb<-ifelse(d$aa=="1"&d$bb=="1"&d$cc=="0",1,0) #aa=1,bb=1,cc=0
d$aacc<-ifelse(d$aa=="1"&d$cc=="1"&d$bb=="0",1,0) #aa=1,bb=0,cc=1
d$bbcc<-ifelse(d$bb=="1"&d$cc=="1"&d$aa=="0",1,0) #aa=0,bb=1,cc=0
d$daabbcc<-ifelse(d$aa=="1"&d$bb=="1"&d$cc=="1",1,0) #aa=bb==cc=1

但是,我有 30 列,我不想全部手动填写。另一件好事是,如果生成的列名是原始列名的组合 (aa+bb->aabb) 等。

我查看了 expand.grid() 函数,但这不是我要找的提前致谢

最佳答案

一些数据:

aa<-c(0,0,0,1,1,0,0)
bb<-c(1,1,0,0,1,0,1)
cc<-c(0,1,0,0,0,1,0)
dd<-rbinom(7,1,.5)
ee<-rbinom(7,1,.5)
ff<-rbinom(7,1,.5)
d<-data.frame(aa,bb,cc,dd,ee,ff)

创建一个包含值的所有可能组合的变量:

combinations <- apply(d,1,function(x) paste(names(d)[as.logical(x)],collapse=""))

将该变量转换为一组命名变量并将结果绑定(bind)到 d:

d2 <- sapply(unique(combinations), function(x) as.numeric(combinations==x))

当原始 df 中只有一个值时,防止出现重复的列名:

colnames(d2) <- paste0(colnames(d2),"1") # could be any naming convention
d2 <- cbind(d, d2)

关于R基于ifelse的dafaframe的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com