我正在尝试根据之前的两列在表格中创建一个新列。我的两列包含逻辑变量,我希望我的新列是基于这些逻辑变量的列(因此,如果两列的答案均为假,那么它们属于第 1 组,如果它们在选项 1 中回答为假但在选项 2 中为真然后他们是第 2 组的一部分等)
我的数据表如下所示:
Choice1 Choice2
TRUE FALSE
TRUE TRUE
FALSE FALSE
FALSE TRUE
TRUE TRUE
我想创建一个新列,其中将个人分为 4 组之一:1、2、3、4。
1=假的,假的
2=假真
3=真假
4=真真
所以上表的结果是 3,4,1,2,4
我最初尝试的代码开始看起来像我在下面所做的,但目前这不适用于代码。
df$newcolumn <- c("(df$Choice1=FALSE,df$Choice2=FALSE)"="1", "(df$Choice1=FALSE, df$Choice2=TRUE)"="2"), "(df$Choice1=TRUE, df$Choice2=FALSE)"="3", "(df$Choice1=TRUE, df$Choice2=TRUE)", ="4")
我也尝试在网上寻找其他合适的类似示例来尝试调整我的示例,但一直找不到。任何帮助将不胜感激
最佳答案
1) 线性公式 指定的公式将给出组数作为因子。在下面的评论中要求因子部分。
transform(dat1, group = factor(1 + 2*Choice1 + Choice2))
## Choice1 Choice2 group
## 1 TRUE FALSE 3
## 2 TRUE TRUE 4
## 3 FALSE FALSE 1
## 4 FALSE TRUE 2
## 5 TRUE TRUE 4
我们可以使用回归推导上述公式。为此,每个组合都必须在 dat1 中表示,但事实就是如此。
y <- c(3, 4, 1, 2, 4)
fm <- lm(y ~., dat1)
fm
##
## Call:
## lm(formula = y ~ ., data = dat1)
##
## Coefficients:
## (Intercept) Choice1TRUE Choice2TRUE
## 1 2 1
# check that it is exact, i.e. residual sum of squares is 0
deviance(fm)
## [1] 3.574526e-31
2) 显式组合另一种方法是显式考虑每个组合:
transform(dat1, group = factor(
1 * (!Choice1 & !Choice2) +
2 * (!Choice1 & Choice2) +
3 * (Choice1 & !Choice2) +
4 * (Choice1 & Choice2)))
给予:
Choice1 Choice2 group
1 TRUE FALSE 3
2 TRUE TRUE 4
3 FALSE FALSE 1
4 FALSE TRUE 2
5 TRUE TRUE 4
3) 互动 第三种方法是使用互动
来创建群体因素。
transform(dat1, group = factor(interaction(Choice2, Choice1), label = ""))
给予:
Choice1 Choice2 group
1 TRUE FALSE 3
2 TRUE TRUE 4
3 FALSE FALSE 1
4 FALSE TRUE 2
5 TRUE TRUE 4
注意事项
可重现形式的输入是:
dat1 <- structure(list(Choice1 = c(TRUE, TRUE, FALSE, FALSE, TRUE),
Choice2 = c(FALSE,
TRUE, FALSE, TRUE, TRUE)), class = "data.frame", row.names =
c(NA, -5L))
关于r - 根据前一列的结果在 R 中创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66660156/