用另一个向量替换每个值 - dplyr

replace every value with one of another vector - dplyr

我有一个包含两列的数据框,如下所示:

> co_purchase
    Source Target
1        0      1
2        0      2
3        0      3
4        0      4
5        0      5
6        1      0
7        1      2
8        1      4
9        1      5
10       1     15

我想用另一个向量的位置 value+1 中的字符 one 更改每个值。我试过这个,即使它可以只替换一列,如果它有效的话:

co_purchase %>% 
  mutate(Source = recode(Source, products$group[Source + 1]))

但这会导致大多数 NA,并出现以下错误:

Warning message:
Problem with `mutate()` column `Source`.
i `Source = recode(...)`.
i Unreplaced values treated as NA as .x is not compatible. Please specify replacements exhaustively or supply .default 

group 向量是这样制作的:

 [1] NA      "Book"  "Book"  "Book"  "Book"  "Book"  "Book"  "Music" "Book"  "Book"  "Book"  "Book"  "Book"  "Book"  "Music"

因此,所需的输出如下:

> co_purchase
      Source     Target
1        NA      "Book"
2        NA      "Book"
3        NA      "Book"
4        NA      "Book"
5        NA      "Book"
6      "Book"      NA
7      "Book"    "Book"
8      "Book"    "Book"
9      "Book"    "Book"
10     "Book"    "Music"

我认为你不需要recode。试试这个 -

library(dplyr)
co_purchase %>% mutate(Source = products$group[Source + 1])

或以 R 为基数 -

co_purchase$Source <- products$group[co_purchase$Source + 1]

对于多列使用 across -

co_purchase %>% mutate(across(.fns = ~products$group[. + 1]))

我们可以只使用 base R 来做到这一点

co_purchase$Source <- with(products, group[co_purchase$Source + 1])

或在data.table

library(data.table)
setDT(co_purchase)[, Source := products$group[Source + 1]]