我有一个名为click
的数据集,类似于这个更大的数据集:
> click <- data.frame(session = c(1,1,2,3,3), AppName = c("App1", "App2", "App3", "App2", "App1"), Step = c(1,2,1,1,2))
session AppName Step
1 1 App1 1
2 1 App2 2
3 2 App3 1
4 3 App2 1
5 3 App1 2
从这个数据框中我想创建一个新的数据框,其中第一列是会话ID,后面的列是步骤。这些值应与步骤y中会话x中发生的情况相对应,因此入口[session = 1, step 2]
的值应为App2
,如下所示......
session Step1 Step2
1 1 App1 App2
2 2 App3 <NA>
3 3 App2 App1
上面的示例是手动完成的,但是,我的原始数据集要大得多,所以我需要另一种方法。我试图查看reshape包,但是,我无法弄清楚我是否可以应用这些函数来获得我想要的东西。
此外,我尝试创建一个新数据框并使用for循环更新入口:
behaviour <- data.frame(matrix("", nrow = sessionNum, ncol = (stepNum + 1)))
behaviourNames <- c("Session")
for (i in 1:stepNum){
behaviourNames <- c(behaviourNames, paste("Step", i, sep = ""))
}
colnames(behaviour) <- behaviourNames
stepNum <- max(click$Step)
for (i in 1:stepNum){
levels(behaviour[,i+1]) <- c(levels(behaviour[,i+1]), nameList)
}
behaviour$Session <- sessions
for (i in 1:nrow(click){
itSession <- click$Session[i]
itStep <- click$Step[i]
behaviour[,itStep + 1][behaviour$Session == itSession] <- click$AppName[i]
}
但是,步骤列的级别中只有一个值,因此无法更新,因此,我认为可能有一种更简单的方法:)