首页 > 解决方案 > 根据几列上的条件添加列

问题描述

我有一个大型的调查数据集。现在我想添加一个列,根据他们对一些问题的回答对一些参与者进行分类。

我有以下数据 框:(实际上比这宽得多,大约 120 列)

age item1 item2 item3 ... item9 question1 question2 ...
18      0     0     4 ...     0         1         2 ...
19      0     4     0 ...     0         5         6 ...
20      4     4     0 ...     4         1         2 ...
21      0     0     4 ...     0         3         4 ...

我有以下要考虑进行分类的项目列表:(实际上比仅 3 个项目要长得多)

selector <- c("item1", "item2", "item9")

现在,我想选择与“至少我的列表中的一项被评为高于 3”标准匹配的每个参与者(行),并向该行添加一个标签。我不能使用“starts_with”之类的东西,因为我不想要所有以“item”开头的项目,而只想要列表中的那些。

结果应如下所示:

age item1 item2 item3 ... item9 question1 question2 ... category
18      0     0     4 ...     0         1         2 ... FALSE
19      0     4     0 ...     0         5         6 ... TRUE
20      4     4     0 ...     4         1         2 ... TRUE
21      0     0     4 ...     0         3         4 ... FALSE

如何在不为我要考虑的每一列写条件语句的情况下实现这一点?

编辑:在这个问题的第一个版本中,有人告诉我这个问题回答了我的问题,但事实并非如此。这是因为我明确不想命名条件中的所有列,而是从一个单独的地方(如列表)获取它们。上述问题中的答案仅在您想要对数据集进行子集化并且没有要检查的大量条件列表时才有效。那么我能做什么呢?

标签: r

解决方案


您可以使用以下解决方案:

library(dplyr)
library(purrr)

df %>%
  mutate(category = pmap_lgl(df %>% 
                           select(selector), ~ any(c(...) > 3)))

  age item1 item2 item3 item9 question1 question2 category
1  18     0     0     4     0         1         2    FALSE
2  19     0     4     0     0         5         6     TRUE
3  20     4     4     0     4         1         2     TRUE
4  21     0     0     4     0         3         4    FALSE

数据

df <- read.table(header = TRUE, text = "
                 age item1 item2 item3 item9 question1 question2
18      0     0     4     0         1         2
19      0     4     0     0         5         6
20      4     4     0     4         1         2
21      0     0     4     0         3         4")

推荐阅读