r - 将一列中的值应用于新列
问题描述
我有一个数据框,其中有几列,每列对应于不同刺激的评级。我也有列指示每个参与者看到每个项目的顺序。每行是一个参与者。
x <- data.frame("post1" = c(1, NA, 2, 3, NA), #stimuli ratings columns
"post2" = c(3, 1, NA, NA, 4),
"post3" = c(NA, 3, 1, 4, NA),
"firstpost" = c("post3", "post1", "post3", "post6",
"post4"), #stimuli order columns
"secondpost" = c("post2", "post3", "post1", "post4",
"post1"))
我想按照他们看到刺激的顺序制作另一组列,其中包含来自第一组列(“post1”等)的值(评级) - 例如,如果他们首先看到帖子 3,则新列会有他们对帖子 3 的评价。像这样:
firstpostrating <- c(4, 1, 2, 3, 2)
secondpostrating <- c(1, 3, 3, 2, 1)
我需要一种方法从他们看到的每个刺激的相应刺激列中获取值。我希望的结果是第一、第二、第三刺激的列和相应的评级——所以我可以看看顺序效应。
任何为此编写函数的帮助将不胜感激!
解决方案
在这里,我提供一种解决方案。我使用的示例数据x
与您的略有不同。因为为了保持一致性,示例数据不应包含post6
and post4
。
library(data.table)
x <- data.table(post1 = c(1, NA, 2, 3, 4), #stimuli ratings columns
post2 = c(3, 1, NA, 2, 5),
post3 = c(2, 3, 1, 4, 5),
firstpost = c("post3", "post1", "post3", "post2",
"post1"), #stimuli order columns
secondpost = c("post2", "post3", "post2", "post3",
"post1"))
x
#> post1 post2 post3 firstpost secondpost
#> 1: 1 3 2 post3 post2
#> 2: NA 1 3 post1 post3
#> 3: 2 NA 1 post3 post2
#> 4: 3 2 4 post2 post3
#> 5: 4 5 5 post1 post1
x[,`:=`(firstpostrate = get(firstpost),
secondpostrate = get(secondpost)),
by = post1]
x
#> post1 post2 post3 firstpost secondpost firstpostrate secondpostrate
#> 1: 1 3 2 post3 post2 2 3
#> 2: NA 1 3 post1 post3 NA 3
#> 3: 2 NA 1 post3 post2 1 NA
#> 4: 3 2 4 post2 post3 2 4
#> 5: 4 5 5 post1 post1 4 4
由reprex 包于 2021-04-29 创建 (v2.0.0 )
推荐阅读
- .net - Epplus 使用 TFS 连接创建 Excel
- python - 在 Redis 上存储和访问复杂 JSON 对象的最快和最佳方式
- javascript - jsReport不通过javascript读取数据
- ios - iOS AudioQueue 播放 AAC 数据总是延迟 2-3 秒
- perl - 使用 XML::LibXML 和 Perl 查找/替换值
- bash - 如何将命令的输出提供给提示符?
- android - 文本输入 EditText 数字不起作用?仅显示“abcxyz”之类的字符,并且还需要避免在edittext(TextInputLayout)中使用数字和符号
- javascript - 使用 JavaScript 切换 CSS 类 - 错误
- javascript - javascript中的移动按钮
- php - readdir while循环未执行