R 给定大量重新编码的数据,编写映射函数的最有效方法

R 给定大量重新编码的数据,编写映射函数的最有效方法,r,dplyr,plyr,R,Dplyr,Plyr,假设我有一个数据框,它是从某人给我的一个大型csv加载的,其中包含我希望应用于其他数据集的数据映射/重新编码。以下是csv中可能存在的一个小的可复制示例: 库(wakefield) csv_映射一种自然的方法是使用连接。如果数据已经在数据帧中,这尤其有用,但如果确实只需要映射值的向量,则可以对其进行按摩 假设我们有一个由csv定义的映射,如下所示: csv\u从映射到 #>1卡迈拉同意 #>萨纳维有些不同意 #>3阿凡格琳同意 #>4玛丽安娜同意 #>5 Wyvonna中性 然后假设我们有一个

假设我有一个数据框,它是从某人给我的一个大型csv加载的,其中包含我希望应用于其他数据集的数据映射/重新编码。以下是csv中可能存在的一个小的可复制示例:

库(wakefield)

csv_映射一种自然的方法是使用
连接
。如果数据已经在数据帧中,这尤其有用,但如果确实只需要映射值的向量,则可以对其进行按摩

假设我们有一个由csv定义的映射,如下所示:

csv\u从映射到
#>1卡迈拉同意
#>萨纳维有些不同意
#>3阿凡格琳同意
#>4玛丽安娜同意
#>5 Wyvonna中性
然后假设我们有一个数据框
df
,其中
x列给出了我们想要映射到新值的值。请注意,
df
还可以包含其他列,在本例中,我们将添加一些随机值用于演示

df x vals
#>1萨纳维-0.95005745
#>2 Maryonna-0.20650715
#>3 Maryonna-0.07755789
#>4 Wyvonna 1.72379970
#>5卡迈拉-1.36642679
#>6 Avangelene-1.48638577
#>7萨纳维0.16987157
#>8怀沃纳-0.55194346
然后,我们可以使用dplyr的
left_join
将映射值引入数据帧。(你可以读更多)

dplyr::left_join(df,csv_映射,by=c(“x”=“from”))
#>x VAL至
#>1萨纳维-0.95005745有点不同意
#>2 Maryonna-0.20650715同意
#>3 Maryonna-0.07755789同意
#>4 Wyvonna 1.72379970空档
#>5卡迈拉-1.36642679同意
#>6 Avangelene-1.48638577同意
#>7萨纳维0.16987157有点不同意
#>8 Wyvonna-0.55194346中性
此时,您拥有给定映射中每个
x
值对应的
值。如果您只希望那些
值,您只需从数据框中拉出
列即可


由(v0.3.0)于2020-06-03创建,这是一个非常简单的解决方案,使用
dplyr
包中的
recode

level_key <- setNames(csv_mapping$to, csv_mapping$from)
dplyr::recode(csv_mapping$from, !!!level_key)

因此,根据Ric的上述回答,我可以使用我最初的方法,但使用dplyr而不是plyr,如下所示:


mapping\u fn啊-这就是我需要的-我将在下面的另一个答案中写下函数方法!谢谢
library(wakefield)
set.seed(42)
csv_mapping <- data.frame(
  from = as.character(name(5)),
  to = as.character(likert_7(5))  
)
csv_mapping

#       from                to
# 1 Merrissa Strongly Disagree
# 2  Lilbert           Neutral
# 3  Rudelle    Strongly Agree
# 4  Kaymani Somewhat Disagree
# 5   Kenadi          Disagree

level_key <- setNames(csv_mapping$to, csv_mapping$from)
dplyr::recode(csv_mapping$from, !!!level_key)
# [1] "Strongly Disagree" "Neutral"           "Strongly Agree"    "Somewhat Disagree" "Disagree"