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