用另一个向量替换每个值 - 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]]
我有一个包含两列的数据框,如下所示:
> 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]]