根据R中的逻辑条件插入列
Insert column based on logical conditions in R
我使用 "filter" 函数根据任一条件从我的数据中选择行:
Subset_data <- filter(Data, company_type == 3 & annualturnover %in% c(1,2,3) | company_type == 2 & annualturnover %in% c(1,2))
现在我想添加一个列,当该行满足第一个条件时,该列的值为“0”(company_type == 3 & annualturnover %in% c(1,2,3)),如果满足第二个条件 (company_type == 2 & annualturnover %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的数据。)
我使用 "filter" 函数根据任一条件从我的数据中选择行:
Subset_data <- filter(Data, company_type == 3 & annualturnover %in% c(1,2,3) | company_type == 2 & annualturnover %in% c(1,2))
现在我想添加一个列,当该行满足第一个条件时,该列的值为“0”(company_type == 3 & annualturnover %in% c(1,2,3)),如果满足第二个条件 (company_type == 2 & annualturnover %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的数据。)