Replace/Vlookup R 中的类型函数
Replace/Vlookup type function in R
我很好奇 R 中是否有一个函数可以完成从另一个数据集中查找相应值并根据该查找替换几列数据的任务 table。
数据将如下所示:
ID value_1 value_2 value_3
----------------------------
1 A - B
2 A C A
3 C A C
4 - - -
查找 table 将如下所示:
letters amount
---------------
A 5
B 6
C 20
预期的输出应如下所示:
ID value_1 value_2 value_3
----------------------------
1 5 - 6
2 5 20 5
3 20 5 20
4 - - -
你可以试试match
df1[-1] <- `dim<-`(df2$amount[match(as.matrix(df1[-1]),
df2$letters)], c(4,3))
df1[is.na(df1)] <- '-'
#wouldn't recommend to replace `NA` as it will convert to `character` class
df1
# ID value_1 value_2 value_3
#1 1 5 - 6
#2 2 5 20 5
#3 3 20 5 20
#4 4 - - -
或者使用 mutate_each
来自 dplyr
的选项
library(dplyr)
df1 %>%
mutate_each(funs(df2$amount[match(., df2$letters)]), -ID)
# ID value_1 value_2 value_3
#1 1 5 NA 6
#2 2 5 20 5
#3 3 20 5 20
#4 4 NA NA NA
我很好奇 R 中是否有一个函数可以完成从另一个数据集中查找相应值并根据该查找替换几列数据的任务 table。
数据将如下所示:
ID value_1 value_2 value_3
----------------------------
1 A - B
2 A C A
3 C A C
4 - - -
查找 table 将如下所示:
letters amount
---------------
A 5
B 6
C 20
预期的输出应如下所示:
ID value_1 value_2 value_3
----------------------------
1 5 - 6
2 5 20 5
3 20 5 20
4 - - -
你可以试试match
df1[-1] <- `dim<-`(df2$amount[match(as.matrix(df1[-1]),
df2$letters)], c(4,3))
df1[is.na(df1)] <- '-'
#wouldn't recommend to replace `NA` as it will convert to `character` class
df1
# ID value_1 value_2 value_3
#1 1 5 - 6
#2 2 5 20 5
#3 3 20 5 20
#4 4 - - -
或者使用 mutate_each
来自 dplyr
library(dplyr)
df1 %>%
mutate_each(funs(df2$amount[match(., df2$letters)]), -ID)
# ID value_1 value_2 value_3
#1 1 5 NA 6
#2 2 5 20 5
#3 3 20 5 20
#4 4 NA NA NA