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



我正在使用"filter"函数根据其中一个条件从数据中选择行:

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

现在我想添加一个列,当行满足第一个条件(company_type== 3和年营业额%in% c(1,2,3((时,该列的值为"0",如果满足第二个条件(company_type== 2和年营业额%in% c(1,2((,则值为"1"。

我怎样才能有效地做到这一点(如果可能的话,没有循环(?

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)

您可以简单地使用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的数据。

相关内容

  • 没有找到相关文章

最新更新