当我将列表用作级别

时间:2017-11-26 12:45:49

标签: r

我有一个名为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]
}

但是,步骤列的级别中只有一个值,因此无法更新,因此,我认为可能有一种更简单的方法:)

0 个答案:

没有答案