我有一个关于各国宽带数据的数据框(以AT_df为例)。 “ofTV”和“ofWithFT”列具有类型特征,并指示每种情况(宽带提供)是否带有捆绑的电视接入或固定电话接入,具有(或不具有)它们两者。
ofWithTV ofWithFT
no no
no no
no no
yes no
yes no
no no
no yes
no yes
no yes
no yes
yes yes
yes yes
我想创建一个新的“ofProduct”列,其中这些案例将被称为“Singleplay”,其中两个事件都是“no”,“TV Doubleplay”,其中事件为“是”;事件为“不”的“不”,“FT Doubleplay”; “是”和“三重播放”,其中两个事件都是“是”。像这样的东西:
ofWithTV ofWithFT ofProduct
no no Singleplay
no no Singleplay
no no Singleplay
yes no TV Doubleplay
yes no TV Doubleplay
no no Singleplay
no yes FT Doubleplay
no yes FT Doubleplay
no yes FT Doubleplay
no yes FT Doubleplay
yes yes Tripleplay
yes yes Tripleplay
为此,我需要一个逻辑操作来分配新值“Singelplay,Doubleplay,...”而不删除/覆盖现有数据。我已经搜索了类似的东西,但无法找到/理解这些操作实际上是如何工作的..
我是这个社区的新手,也是R的新手(这里的第一篇文章)。希望有人可以提供帮助。
我们可以使用case_when
的dplyr。
library(dplyr)
dat2 <- dat %>%
mutate(ofProduct = case_when(
ofWithTV %in% "no" & ofWithFT %in% "no" ~ "Singleplay",
ofWithTV %in% "yes" & ofWithFT %in% "no" ~ "TV Doubleplay",
ofWithTV %in% "no" & ofWithFT %in% "yes" ~ "FT Doubleplay",
ofWithTV %in% "yes" & ofWithFT %in% "yes" ~ "Tripleplay"
))
dat2
# ofWithTV ofWithFT ofProduct
# 1 no no Singleplay
# 2 no no Singleplay
# 3 no no Singleplay
# 4 yes no TV Doubleplay
# 5 yes no TV Doubleplay
# 6 no no Singleplay
# 7 no yes FT Doubleplay
# 8 no yes FT Doubleplay
# 9 no yes FT Doubleplay
# 10 no yes FT Doubleplay
# 11 yes yes Tripleplay
# 12 yes yes Tripleplay
或者我们可以先创建一个查找表,然后将表连接到原始数据框。
library(dplyr)
library(tibble)
look_up <- tribble(
~ofWithTV, ~ofWithFT, ~ofProduct,
"no" , "no" , "Singleplay",
"yes" , "no" , "TV Doubleplay",
"no" , "yes" , "FT Doubleplay",
"yes" , "yes" , "Tripleplay"
)
dat3 <- dat %>%
left_join(look_up, by = c('ofWithTV', "ofWithFT"))
dat3
# ofWithTV ofWithFT ofProduct
# 1 no no Singleplay
# 2 no no Singleplay
# 3 no no Singleplay
# 4 yes no TV Doubleplay
# 5 yes no TV Doubleplay
# 6 no no Singleplay
# 7 no yes FT Doubleplay
# 8 no yes FT Doubleplay
# 9 no yes FT Doubleplay
# 10 no yes FT Doubleplay
# 11 yes yes Tripleplay
# 12 yes yes Tripleplay
数据
dat <- read.table(text = "ofWithTV ofWithFT
no no
no no
no no
yes no
yes no
no no
no yes
no yes
no yes
no yes
yes yes
yes yes",
header = TRUE, stringsAsFactors = FALSE)