如果没有更多细节(即可重现的示例),很难知道这是否回答了您的问题,但这里有一个潜在的解决方案:
set.seed(3)
A <- data.frame(box = sample(5:7, size = 50, replace = TRUE),
document = sample(74:76, size = 50, replace = TRUE))
A$size <- ifelse(A$box == 6 & A$document == 75, "big", "other")
head(A, 10)
#> box document size
#> 1 5 76 other
#> 2 6 76 other
#> 3 7 75 other
#> 4 6 75 big
#> 5 7 74 other
#> 6 7 76 other
#> 7 6 75 big
#> 8 7 74 other
#> 9 5 75 other
#> 10 6 74 other
另一个可能的解决方案是使用 dplyr 包中的case_when():
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
A <- data.frame(box = sample(5:7, size = 50, replace = TRUE),
document = sample(74:76, size = 50, replace = TRUE))
A %>%
mutate(size = case_when(box == 6 & document == 75 ~ "big",
box < 6 & document < 75 ~ "small",
document < 75 ~ "medium",
TRUE ~ "other"))
#> box document size
#> 1 6 75 big
#> 2 6 74 medium
#> 3 7 76 other
#> 4 5 75 other
#> 5 6 76 other
#> 6 5 75 other
#> 7 6 76 other
#> 8 5 74 small
#> 9 5 74 small
#> 10 6 74 medium
#> ...
由reprex package 创建于 2021-11-08 (v2.0.1)
编辑
解决您对“空白”的评论,如果它们不是“NA”:
A <- structure(
list(
Box = c(6, 6, 7, 7, 7, 8, 8),
Document = c(75, 75, 23, 23, 25, 13, 13),
Size = c("", "", "big", "big", "", "big", "big")),
row.names = c(NA,-7L),
class = c("tbl_df", "tbl", "data.frame")
)
A
#> # A tibble: 7 × 3
#> Box Document Size
#> <dbl> <dbl> <chr>
#> 1 6 75 ""
#> 2 6 75 ""
#> 3 7 23 "big"
#> 4 7 23 "big"
#> 5 7 25 ""
#> 6 8 13 "big"
#> 7 8 13 "big"
A$Size <- ifelse(A$Box == 6 & A$Document == 75, "big", A$Size)
A
#> # A tibble: 7 × 3
#> Box Document Size
#> <dbl> <dbl> <chr>
#> 1 6 75 "big"
#> 2 6 75 "big"
#> 3 7 23 "big"
#> 4 7 23 "big"
#> 5 7 25 ""
#> 6 8 13 "big"
#> 7 8 13 "big"
由reprex package (v2.0.1) 于 2021-11-09 创建