簡體   English   中英

根據R中的查找值將值分配給不同的列

[英]Assign value to different columns based on lookup values in R

我試圖基於查找值將值分配給不同的列,分別為每一行。 我正在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))

我有很多參與者(即,行)以許多項目(即,列)中的每一項得分來評估。 我想在數據框中為與項目得分相關的值創建變量(基於查找表)。 這是我想要的輸出:

#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))

我有一個相當大的數據集,如果可能的話,我想遠離循環。 此外,如果處理速度更快,我們可以跳過所有NA的行。

這是一個整理方法。 其基礎是您要首先gather分數列,並left_join查找表,以便您的值與分數匹配。 然后剩下的就是操縱,以返回到所需的輸出格式。 為此,我們需要使用gatherunite創建所需的列名,然后再將其spread 請注意,您一開始需要rowid_to_column ,以便spread會知道將哪些觀察值放置在哪些行上。 如果要精確獲取輸出列名稱,可以混入一些stringr

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))

library(tidyverse)
mydata %>%
  rowid_to_column(var = "participant") %>%
  gather(items, score, starts_with("item")) %>%
  left_join(lookup) %>%
  gather(coltype, val, score:value) %>%
  unite(colname, coltype, items) %>%
  spread(colname, val)
#> Joining, by = "score"
#>   participant score_item1 score_item2 score_item3 score_item57 value_item1
#> 1           1          NA          NA          NA           NA          NA
#> 2           2           1           2           3            4           6
#> 3           3          NA          NA          NA            4          NA
#> 4           4           4           3          NA            1          10
#>   value_item2 value_item3 value_item57
#> 1          NA          NA           NA
#> 2           7           8           10
#> 3          NA          NA           10
#> 4           8          NA            6

reprex軟件包 (v0.2.0)於2018-06-19創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM