根据R中的查找值将值分配给不同的列

根据R中的查找值将值分配给不同的列,r,loops,apply,lookup,lapply,R,Loops,Apply,Lookup,Lapply,我试图根据查找值分别为每行的不同列分配值。我在R工作。这里有一个简单的工作示例: #Item scores item1 <- c(NA, 1, NA, 4) item2 <- c(NA, 2, NA, 3) item3 <- c(NA, 3, NA, NA) item57 <- c(NA, 4, 4, 1) mydata <- data.frame(item1, item2, item3, item57) #Lookup values based on item

我试图根据查找值分别为每行的不同列分配值。我在R工作。这里有一个简单的工作示例:

#Item scores
item1 <- c(NA, 1, NA, 4)
item2 <- c(NA, 2, NA, 3)
item3 <- c(NA, 3, NA, NA)
item57 <- c(NA, 4, 4, 1)

mydata <- data.frame(item1, item2, item3, item57)

#Lookup values based on item score
lookup <- data.frame(score = 1:4, value=c(6, 7, 8, 10))
#项目分数

item1这里有一个tidyverse方法。它的基础是,您希望首先
收集
分数列,然后
左键连接
查找表,以便使您的值与分数匹配。然后剩下的只是操作,以返回到所需的输出格式。为此,我们需要使用
collect
unite
创建所需的列名,然后最后使用
spread
返回。请注意,开始时需要
rowid\u to\u列
,以便
spread
知道要在哪些行上放置哪些观察值。如果您想准确地获得输出列名,可以混合使用一些
stringr

item1%
排列(colname,val)
#>通过=“分数”加入
#>参与者得分项目1得分项目2得分项目3得分项目57值项目1
#>1不,不,不,不
#> 2           2           1           2           3            4           6
#>3 3 NA NA 4 NA
#>4 4 3 NA 110
#>价值项目2价值项目3价值项目57
#>1NA NA NA
#> 2           7           8           10
#>3 NA NA 10
#>4 8 NA 6

由(v0.2.0)于2018年6月19日创建。

签出
?dplyr::left_join
#Desired output (adding value that is tied to item score to the original data)
desiredOutput <- cbind(mydata,
                   value1 = c(NA, 6, NA, 10),
                   value2 = c(NA, 7, NA, 8),
                   value3 = c(NA, 8, NA, NA),
                   value57 = c(NA, 10, 10, 6))