在使用QCA包时,我们通常使用ifelse
来替换具有二分值的数据集列。但是我发现在处理模糊集时必须使用嵌套的ifelse
是很难看的。
有没有办法使用案例陈述? switch
仅用于控制流程,不处理向量。
例如:
DDDfz $VIES <- ifelse (DDD $vies == "p", 1, 0)
没问题,但是
DDDfz $TIPO <- switch (DDD $tipo, "PD", 0, "PL", 0.5, "MP", 1)
Error in switch(DDD$tipo, "PD", 0, "PL", 0.5, "MP", 1) :
EXPR deve ser um vetor de comprimento 1
答案 0 :(得分:4)
switch
未进行矢量化,无法在此处使用。 R为这样的任务提供factor
数据类。
factor(c(0, 0.5, 1), levels = c(0, 0.5, 1),
labels = c("PD", "PL", "MP"))
#[1] PD PL MP
#Levels: PD PL MP
在第一个示例中,您也不需要ifelse
。您只需执行as.integer(DDD$vies == "p")
。
PS:$
前面的空格是一种奇怪的代码风格。
答案 1 :(得分:1)
#data example
TIPO = c("PD", "PL", "MP", "PL", "MP")
# here we create dictionary
dict = c("PD" = 0, "PL" = 0.5, "MP" = 1)
# further we match dictionary with original values
recoded_TIPO = dict[TIPO]
# result
recoded_TIPO
答案 2 :(得分:0)
遗憾的是,R switch
函数的用处非常有限。 The ‹dplyr› package has a nice pattern matching function更强大:
result = case_when(
x == 'PD' ~ 0,
x == 'PL' ~ 0.5,
x == 'MP' ~ 1
)
在这种特殊情况下,其他解决方案(使用因子或向量)更简洁,也更有效。但case_when
一般来说更强大。