我有以下数据框:
> team_1_A
MemberA Q1 Q2
1 C 2 3
2 B 3 4
> team_1_B
MemberB Q1 Q2
1 A 5 4
2 C 5 2
> team_1_C
MemberC Q1 Q2
1 A 2 5
2 B 5 5
这些数据框对应于有关团队成员感知的个人回复。例如,第一个数据框是团队成员A(在团队1中)如何感知团队成员B和C的问题1和2(Q1和Q2)。我的目标是自动化一个流程,将每个问题的个体响应中的这些数据帧转换为团队级数据帧,以便为这些数据帧获得的内容将是:
> T1Q1
X A B C
1 A 0 3 2
2 B 5 0 5
3 C 2 5 0
> T1Q2
X A B C
1 A 0 3 2
2 B 5 0 5
3 C 2 5 0
因此,沿着对角线出现0,并且逐行是每个成员对于给定问题所说的另一个成员。例如,在第1行的T1Q1
中,我们看到A对B和C的看法。
答案 0 :(得分:1)
reshape2
套餐可让您轻松完成此项任务:
rm(list=ls())
library(reshape2)
team_1_A <- data.frame(MemberA=c('C', 'B'), Q1=c(2,3), Q2=c(3,4))
team_1_B <- data.frame(MemberB=c('A', 'C'), Q1=c(5,5), Q2=c(4,2))
team_1_C <- data.frame(MemberC=c('A', 'B'), Q1=c(2,5), Q2=c(5,5))
# store data frames in a list
members <- list(team_1_A, team_1_B, team_1_C)
# format rows/columns
formatted <- lapply(members, function(m){
m$Respondent <- gsub('Member', '', names(m)[1])
names(m)[1] <- 'TeamMate'
return(m)
})
formatted <- do.call('rbind', formatted)
# separate questions into different data frames
questionList <- lapply(c(1,2), function(q) formatted[,c('Respondent', 'TeamMate', paste0('Q',q))])
# reshape, ensure order is correct
questionList <- lapply(questionList, function(q) {
q <- dcast(q, Respondent ~ TeamMate)
q <- q[,c('Respondent', 'A', 'B', 'C')]
return(q)
})
names(questionList) <- c('T1Q1', 'T1Q2')
# replace NA with 0
# etc...
questionList
$T1Q1
Respondent A B C
1 A NA 3 2
2 B 5 NA 5
3 C 2 5 NA
$T1Q2
Respondent A B C
1 A NA 4 3
2 B 4 NA 2
3 C 5 5 NA