gpt4 book ai didi

R - 来自数据框中两个子集的新变量,行中的随机顺序

转载 作者:行者123 更新时间:2023-12-04 11:35:49 25 4
gpt4 key购买 nike

我有一个包含两组变量的数据框:首先,30 列包含 30 个刺激 ID,但每行的顺序是随机的。然后,相对于每个刺激的 30 个响应值。每个 block 的第一列由一个刺激-响应对组成,每个 block 的第二列是第二个刺激响应对等,但刺激 id 本身会有所不同。

我想为每个具有相应响应的刺激 ID 创建新变量。我相信我所拥有的与这个问题的最终结果相似:Shuffle a data frame while maintaining order with another data frame

示例:

set.seed(3)
d <- data.frame( a = c("L", "G", "E", "E"),
b = c("G", "E", "L", "G"),
c = c("E", "L", "G", "L"),
e = rnorm(4), f = rnorm(4), g = rnorm(4))
d
# a b c e f g
# 1 L G E -1.1312186 -0.3076564 0.1998116
# 2 G E L -0.7163585 -0.9530173 -0.5784837
# 3 E L G 0.2526524 -0.6482428 -0.9423007
# 4 E G L 0.1520457 1.2243136 -0.2037282

我想要的输出:

d$L <- c(d[1, 4], d[2, 6], d[3, 5], d[4, 6])
d$E <- c(d[1, 6], d[2, 5], d[3, 4], d[4, 4])
d$G <- c(d[1, 5], d[2, 4], d[3, 6], d[4, 5])
d
# a b c e f g L E
# 1 L G E -1.1312186 -0.3076564 0.1998116 -1.1312186 0.1998116
# 2 G E L -0.7163585 -0.9530173 -0.5784837 -0.5784837 -0.9530173
# 3 E L G 0.2526524 -0.6482428 -0.9423007 -0.6482428 0.2526524
# 4 E G L 0.1520457 1.2243136 -0.2037282 -0.9423007 -1.1312186

我有两个问题:

  1. 填充新的刺激变量
  2. 对每个刺激重复此操作

对于 1.,我尝试了嵌套的 ifelse 语句

d$L <- ifelse(d$a == "L", d$e,
ifelse(d$b=="L", d$f,
ifelse(d$c=="L", d$g, NA)))

但最后一个 ifelse 会覆盖前两个。我尝试了一个 dplyr::mutate 但无法弄清楚如何使用一个 ifelse 语句,并且 case_when 卡在了如何在第二个中引用正确的列设置包含响应,而不默认为第一个响应列。

对于 2.:我认为我应该使用 mapply 将两个子集分成两个单独的矩阵,但据我所知,我的第一个需要一个基于函数的解决方案问题。

最佳答案

一个选项是创建行/列索引以从列 4:6 中提取值并将其分配给数据集中的三个新列

un1 <- unique(unlist(d[1:3]))
d[un1] <- lapply(un1, function(x)
d[4:6][cbind(seq_len(nrow(d)), max.col(d[1:3] == x, "first"))])

数据

d <- structure(list(a = c("L", "G", "E", "E"), b = c("G", "E", "L", 
"G"), c = c("E", "L", "G", "L"), e = c(-1.1312186, -0.7163585,
0.2526524, 0.1520457), f = c(-0.3076564, -0.9530173, -0.6482428,
1.2243136), g = c(0.1998116, -0.5784837, -0.9423007, -0.2037282
)), class = "data.frame", row.names = c("1", "2", "3", "4"))

关于R - 来自数据框中两个子集的新变量,行中的随机顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59326833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com