data.frame中具有特定列的矩阵运算
我有一个来自Qualtrics调查的数据集。看起来是这样的:data.frame中具有特定列的矩阵运算,r,qualtrics,R,Qualtrics,我有一个来自Qualtrics调查的数据集。看起来是这样的: V3 Q8_42 Q8_33 Q8_72 Q8_38 Q13_1_42 Q13_1_33 Q13_1_72 Q13_1_38 Chap A . 1 . . . 4 . . Chap B 1 . . . 4 . . . Chap C
V3 Q8_42 Q8_33 Q8_72 Q8_38 Q13_1_42 Q13_1_33 Q13_1_72 Q13_1_38
Chap A . 1 . . . 4 . .
Chap B 1 . . . 4 . . .
Chap C . . . . . . . .
Chap D . . . . . . . .
快照显示四个人被问到是否是朋友(q8_42是A;q8_33是B,q8_72是C,q8_38是D)。如果有人说他们是朋友,那么他们会被问到他们友谊的强度(q13_1_42代表a,q13_1_33代表B,q13_1_72代表C,q13_1_38代表D)。我总共有95个人,向他们提出的9个问题都是关于他们的友谊。我应该如何运行矩阵运算,以得到以下矩阵,每个问题1个:
Chap A Chap B Chap C Chap D
Chap A 0 4 . .
Chap B 4 0 . .
Chap C . . 0 .
Chap D . . . 0
我的解决方案是将数据(名为“kolp”)读入R,然后运行
Chap.A <- (kolp$q8_42 * kolp$q13_1_42)
Chap.B <- (kolp$q8_33 * kolp$q13_1_33)
Chap.C <- (kolp$q8_72 * kolp$q13_1_72)
Chap.D <- (kolp$q8_38 * kolp$q13_1_38)
Mat.1 <- cbind(Chap.A, Chap.B, Chap.C, Chap.D)
rownames(Mat.1) <- c("Chap.A", "Chap.B", "Chap.C", "Chap.D")
但我知道这是一种笨拙的方式,尤其是9个矩阵提取为*.csv或*.txt文件,dim为95x95假设列的形式为“questionID\u individualID”,您可以尝试使用此函数来处理数据:
f <- function(dat)
{
n <- names(dat)
id <- substring(n, nchar(n)-1)
qu_id <- substring(n, 1, nchar(n)-3)
individuals <- sort(unique(id))
questions <- unique(qu_id)
result <- 1
for(q in questions)
{
filter <- qu_id==q
result <- result * dat[,filter][,match(individuals, id[filter])]
}
result
colnames(result) <- individuals
result
}
f谢谢@Ferdinand.kraft。。。我今天要试一试,看看效果如何。
f <- function(dat)
{
n <- names(dat)
id <- substring(n, nchar(n)-1)
qu_id <- substring(n, 1, nchar(n)-3)
individuals <- sort(unique(id))
questions <- unique(qu_id)
result <- 1
for(q in questions)
{
filter <- qu_id==q
result <- result * dat[,filter][,match(individuals, id[filter])]
}
result
colnames(result) <- individuals
result
}