r - 根据前一列的结果在 R 中创建一个新列

标签 r

我正在尝试根据之前的两列在表格中创建一个新列。我的两列包含逻辑变量,我希望我的新列是基于这些逻辑变量的列(因此,如果两列的答案均为假,那么它们属于第 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/

相关文章:

r - 使用 "R CMD INSTALL"安装R包时如何安装依赖项?

r - r : duplicate faceted geom_density and geom_density_ridges results 中的 ggplot

r - 按列的阈值子集数据帧

r - 错误: Sets of levels in train and test don't match (knncat R)

r - 在 timeDate 包中循环假期

r - 按范围对数字向量进行分组

r - 将 `mclapply` 结果放回 data.frame

r - summarise_each 已弃用 - 新 summarise_at 引发错误

r - 如何在 dplyr 中执行相当于 Excel 滚动 sumifs 的操作?

r - 在 R 中使用 lm 时,可变长度不同错误