根据r中的查找值将值分配给不同的列(代码片段)

author author     2023-05-09     345

关键词:

我正在尝试根据查找值为每行分别为不同的列分配值。我在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 package创建于2018-06-19(v0.2.0)。

R:将值分配给数据框中的动态变量时遇到问题

】R:将值分配给数据框中的动态变量时遇到问题【英文标题】:R:troubleassigningvaluestoadynamicvariableinadataframe【发布时间】:2018-07-0506:49:27【问题描述】:我正在尝试将值分配给用户定义的数据框变量。用户在数据帧df中指定变量的... 查看详情

根据带有if条件的多个文本框值将值分配给表单上的文本框-MS ACCESS

】根据带有if条件的多个文本框值将值分配给表单上的文本框-MSACCESS【英文标题】:Assignvaluetoatextboxonformbasedonmultipletextboxexvaluewithifcondition-MSACCESS【发布时间】:2015-06-0311:00:25【问题描述】:让我解释一下,我的表单上有如下字... 查看详情

如何根据 azure databricks 中的列值将静态值传递给动态值

】如何根据azuredatabricks中的列值将静态值传递给动态值【英文标题】:howtopassstaticvalueintodynamiconbasisofcolumnvalueinazuredatabricks【发布时间】:2021-12-0110:55:23【问题描述】:如何根据azure数据砖中的列值将静态值传递给动态值目前,... 查看详情

根据查找值将值从一张表匹配并粘贴到另一张表中

】根据查找值将值从一张表匹配并粘贴到另一张表中【英文标题】:MatchandpastevaluefromonesheetintoanotherbasedonaLookupvalue【发布时间】:2022-01-2407:10:40【问题描述】:我有两张纸,账单和对账,在B列中都有账单ID。我需要的是一个vba代... 查看详情

如何将值向量分配给R中igraph中的顶点标签?

】如何将值向量分配给R中igraph中的顶点标签?【英文标题】:HowtoassignavectorofvaluestoavertexlabelinigraphinR?【发布时间】:2022-01-1622:05:30【问题描述】:假设,我在igraph中有一个包含3个节点和3条边的图,如下所示:library(igraph)G<-gr... 查看详情

将预定义的数字分配给数据框中的列行值(代码片段)

假设我有一个数据帧CDagreeAverageagreeagreestronglyagreedisagreedisagreeagree我想要做的是为这样的C列值分配数字?CD13112001我可以使用map作为单列,但如果有多列,我如何将值更改为数字而无需为每个列单独写入(我知道我可以使用for循环... 查看详情

根据对象数组中的其他两个值将值转换为百分比

】根据对象数组中的其他两个值将值转换为百分比【英文标题】:Convertvaluestopercentsbasedontwoothervaluesinarrayofobjects【发布时间】:2021-07-2808:15:05【问题描述】:我有一个对象数组:letdata=[date:\'2018-01-01\',device:\'iphone\',site:\'google\',val... 查看详情

Pandas Dataframe 根据列值将值展平到单元格

】PandasDataframe根据列值将值展平到单元格【英文标题】:PandasDataframeFlattenvaluestocellbasedoncolumnvalue【发布时间】:2021-12-0318:56:16【问题描述】:我有一个从Excel读取的简单数据框。为了进一步处理,我需要将“存储”值组合到一个... 查看详情

如何使用 Python 根据数据集的列查找动态函数的根

】如何使用Python根据数据集的列查找动态函数的根【英文标题】:HowtofindarootofadynamicfunctionbasedincolumnsofadatasetusingPython【发布时间】:2020-03-0714:51:50【问题描述】:我是python的初学者,我需要将R中的一些代码翻译成Python。我需要... 查看详情

用户定义函数中的子集以将值分配给目标列

...间】:2019-01-0223:25:48【问题描述】:我想编写一个函数,根据数据框中其他三列的值替换目标列的值。data<-data.frame("exists"=c(1,0,1,0,1,0,0,0,1,1),"specific"=c("ye 查看详情

是否需要根据表中的唯一值将列分解为多个列?(代码片段)

请帮助我在Excel和SQL/Redshift中使用合适的方法。所以假设我有一个像这样的表:我想将此列5分解为与该列中的唯一值一样多的列,并将第6列的相应值放入行中。基本上我只想要一行用于唯一的[column1,column2,column3]对。所以,我... 查看详情

分配给 NumPy 中的列

】分配给NumPy中的列【英文标题】:AssigningtocolumnsinNumPy【发布时间】:2012-06-1023:59:49【问题描述】:如何使用NumPy编写以下MATLAB代码?A=zeros(5,100);x=ones(5,1);A(:,1)=x;分配给行似乎很容易,但我找不到将数组分配给另一个数组的列的... 查看详情

如何将值分配给数组中的随机位置?

】如何将值分配给数组中的随机位置?【英文标题】:Howdoyouassignavaluetoarandompositioninanarray?【发布时间】:2019-10-0104:54:01【问题描述】:我正在尝试制作扫雷游戏,我想在按钮阵列上随机放置炸弹到目前为止,我的按钮数组代码... 查看详情

如何处理 R 中的大矩阵或 data.frame

】如何处理R中的大矩阵或data.frame【英文标题】:howtodealwithabigmatrixordata.frameinR【发布时间】:2013-10-2323:33:59【问题描述】:我正在尝试将值分配给“10000000*6”逻辑矩阵。该过程将是1)创建一个矩阵;2)然后将值分配给矩阵的... 查看详情

如何根据不同的标准对组进行细分

】如何根据不同的标准对组进行细分【英文标题】:howtosegmentgroupsbasedondifferentcriteria【发布时间】:2019-12-0321:45:06【问题描述】:我正在尝试根据A到F列的值将测试组和对照组分配到下表中。最终,我想要一个如下所示的表格。... 查看详情

在 keydown 上,为啥值的 console.log 与将值分配给对象不同?

】在keydown上,为啥值的console.log与将值分配给对象不同?【英文标题】:Onkeydownwhydoesaconsole.logofthevaluediffertoassigningthevaluetoanobject?在keydown上,为什么值的console.log与将值分配给对象不同?【发布时间】:2020-08-0803:37:05【问题描述... 查看详情

遍历 pandas 行并根据其他列中的值设置列值

】遍历pandas行并根据其他列中的值设置列值【英文标题】:iterateoverpandasrowsandsetcolumnvaluesbasedonvaluesinothercolumn【发布时间】:2019-08-0212:57:53【问题描述】:我有一个数据框,其中一列(col1)包含值Y或N。我想根据col1中的值将值(随... 查看详情

将值从另一个分配给csv文件(代码片段)

我有两个csv文件,其中包含10辆汽车和15位驾驶员的日历。目标是同时加入两个日历。Car.csv看起来像这样Car1;ACar2;ACar3;ICar4;ACar5;ACar6;ICar7;ACar8;ACar9;YCar10;ADriver.csv看起来像这样Driver1;VDriver2;VDriver3;YDriver4;ADriver5;ADriver6;VDriver7;ADrive 查看详情