首页 > 解决方案 > 是否有一个 R 函数或 dplyr 函数,您可以在其中分配值而无需替换?

问题描述

例如,如果我有一个数据框:

v1 v2
a  1 
b  2 
c  3 
a  1
c  3

我想创建 v3 给定 v1 等于它们各自的值。例如,如果 v1 等于 a,那么我想将“科学”分配给 v3,如果 v1 等于 b,那么我想将“数学”分配给 v3 等等。

v1 v2 v3
a  1  science
b  2  maths
c  3  english
a  1  science
c  3  english

我会以标准方式使用 dplyr 的 case_when 或重新编码列出许多条件,但是变量中有太多唯一值,我应用条件来有效地执行此操作。

谢谢。

标签: rdplyr

解决方案


您可以使用内置的 merge() 函数来实现这一点。更像是 sql 中的连接。下面是一个例子

df1 <- data.frame(v1=c("a","b","c","a","e"),v2=c(1,2,3,4,5))
df2 <- data.frame(c1=c("a","b","c","d","e"),c2=c("maths","mechanics","biology","chemistry","physics"))

df3 <- merge(df1,df2,by.x='v1',by.y='c1',all.x = TRUE)

#INPUT
#df1
# v1 v2
# 1  a  1
# 2  b  2
# 3  c  3
# 4  a  4
# 5  e  5

#df2
# c1        c2
# 1  a     maths
# 2  b mechanics
# 3  c   biology
# 4  d chemistry
# 5  e   physics

#df3
# v1 v2        c2
# 1  a  1     maths
# 2  a  4     maths
# 3  b  2 mechanics
# 4  c  3   biology
# 5  e  5   physics

推荐阅读