gpt4 book ai didi

r - 从互斥虚拟变量创建分类变量

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

我的问题是关于先前回答的有关combining multiple dummy variables into a single categorical variable的问题的详细说明。

在先前提出的问题中,分类变量是由不互斥的伪变量创建的。就我而言,我的伪变量是互斥的,因为它们表示2X2主体间析因设计中的交叉实验条件(该主体中也有主体组件,我不在此讨论),所以我不认为interaction可以做什么我需要去做。

例如,我的数据可能如下所示:

id   conditionA    conditionB    conditionC     conditionD
1 NA 1 NA NA
2 1 NA NA NA
3 NA NA 1 NA
4 NA NA NA 1
5 NA 2 NA NA
6 2 NA NA NA
7 NA NA 2 NA
8 NA NA NA 2

现在,我想创建组合各种不同类型条件的分类变量。例如,可以为具有条件A和B的值的人编码一个类别变量,而为具有条件C和D的值的人编码。
id   conditionA    conditionB    conditionC     conditionD  factor1    factor2
1 NA 1 NA NA 1 NA
2 1 NA NA NA 1 NA
3 NA NA 1 NA NA 1
4 NA NA NA 1 NA 1
5 NA 2 NA NA 2 NA
6 2 NA NA NA 2 NA
7 NA NA 2 NA NA 2
8 NA NA NA 2 NA 2

现在,我正在使用 ifelse()语句来执行此操作,这很简单,就是一团糟(并且并不总是有效)。请帮忙!可能有一些非常明显的“更简便的方法”。

编辑:

我正在使用的 ifelse命令的种类如下:
attach(df)
df$factor<-ifelse(conditionA==1 | conditionB==1, 1, NA)
df$factor<-ifelse(conditionA==2 | conditionB==2, 2, df$factor)

实际上,我每次都会合并6到8列,所以一个更优雅的解决方案会有所帮助。

最佳答案

Update (2019): Please use dplyr::coalesce(), it works pretty much the same.



我的 R package具有便利功能,允许为向量列表中的每个元素选择第一个非 NA值:
#library(devtools)
#install_github('kimisc', 'muelleki')
library(kimisc)

df$factor1 <- with(df, coalesce.na(conditionA, conditionB))

(我不确定 conditionAconditionB是否是因子是否可行。如有必要,在使用 as.numeric(as.character(...))之前将它们转换为数字。)

否则,您可以尝试 interaction,并结合对结果因子的水平进行重新编码-但对我来说,您似乎对第一种解决方案更感兴趣:
df$conditionAB <- with(df, interaction(coalesce.na(conditionA, 0), 
coalesce.na(conditionB, 0)))
levels(df$conditionAB) <- c('A', 'B')

关于r - 从互斥虚拟变量创建分类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16135316/

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