根据R中的逻辑条件插入列

时间:2019-12-28 04:22:03

标签: r logical-operators

我正在使用“过滤器”功能根据以下任一条件从数据中选择行:

Subset_data <- filter(Data, company_type == 3 & annualturnover %in% c(1,2,3) | company_type == 2 & annualturnover %in% c(1,2)) 

现在,当行满足第一个条件(company_type == 3&Annualturnover%in%c(1,2,3))时,我想添加一个值为“ 0”的列,并将值“ 1”如果满足第二个条件(company_type == 2和年营业额百分比in%c(1,2))。

我如何有效地做到这一点(如果可能,不要循环播放)?

2 个答案:

答案 0 :(得分:2)

library(dplyr)
Subset_data <- Data %>%
  filter(company_type == 3 & annualturnover %in% c(1,2,3) | 
           company_type == 2 & annualturnover %in% c(1,2)) %>%
  mutate(category = case_when(
    company_type == 3 & annualturnover %in% c(1,2,3) ~ 0L,
    company_type == 2 & annualturnover %in% c(1,2)   ~ 1L,
    TRUE ~ NA_integer_))

Subset_data
## A tibble: 2 x 3
#  company_type annualturnover category
#         <int>          <int>    <int>
#1            3              3        0
#2            2              2        1

使用这些虚假数据

Data <- tribble(
  ~company_type, ~annualturnover,
  1L, 2L,
  3L, 3L,
  2L, 2L,
  2L, 3L)

答案 1 :(得分:1)

您可以仅使用ifelse,然后排除NA个案例。

dat$cat <- with(dat, ifelse(company_type == 3 & annualturnover %in% 1:3, 0,
                            ifelse(company_type == 2 & annualturnover %in% 1:2, 1, NA)))
dat <- dat[!is.na(dat$cat), ]
dat
#   company_type annualturnover cat
# 2            3              3   0
# 3            2              2   1

(使用 @JonSpring 的数据。)