在R中将明细表(宽格式)转换为长格式,并仅选择一些行

在R中将明细表(宽格式)转换为长格式,并仅选择一些行,r,data-manipulation,R,Data Manipulation,我想在有X的情况下,为level和day的每个组合创建行 例如: dat <- data.frame(1:5, matrix( c("X", "-", "X", "-", "-", "X", "X", "-", "X", "-", "X", "-", "X", "-", "X", "-", "X", "-", "-", "-", "-", "-", "X", "X", "-"), 5, 5, byrow=T)) colnames(dat) <- c("lvl", "Mon", "

我想在有X的情况下,为level和day的每个组合创建行

例如:

dat <- data.frame(1:5, matrix( c("X", "-", "X", "-", "-", "X", "X", "-", "X", "-", "X", "-", "X", "-", "X", "-", "X", "-", "-", "-", "-", "-", "X", "X", "-"), 5, 5, byrow=T))
colnames(dat) <- c("lvl",  "Mon",  "Tues", "Wed",  "Thur", "Fri" )

如果您的计划存储为矩阵或数据框,则可以使用重塑2软件包:


我只需要添加id.vars=c来获得我想要的输出:meltSche,id.vars=clvl@snoram重塑2包中有很多选项。有一个很好的教程,请不要使用编辑:在您的文章;这不是一个论坛。每个问题都有详细的编辑历史记录,任何人都可以查看。另外,不要在你的帖子中发表社论;这就是评论的目的。不要把答案放在你的问题里;这就是答案所在。请在评论中保持礼貌;粗鲁是不能容忍的。首先我被要求编辑这篇文章,然后我因为编辑而被责骂。哈?这不是论坛。学习这里存在的惯例;不要带着你的坏习惯去论坛。我不是来争论的,只是我不知道你们到底想让我做什么?就让这篇文章保持原样,更仔细地写下下一个问题吧?既然编辑的绰号和社论化已经消失了,攻击性的评论也被删除了,这篇文章就这么好了。我们的要求是努力更好地理解我们在这里的工作方式,避免使用您可能在其他论坛环境中学习到的、在这里效果不佳的做法。这就是全部。
# generate a fake schedule
sched <- matrix(rbinom(25, 1, 1/2), 5,
  dimnames = list(1:5, c("Mo", "Tu", "We", "Th", "Fr")))

library(reshape2)
melt(sched)

#    Var1 Var2 value
# 1     1   Mo     0
# 2     2   Mo     0
# 3     3   Mo     1
# 4     4   Mo     0
# 5     5   Mo     1
# 6     1   Tu     0
# 7     2   Tu     1
# 8     3   Tu     1
# 9     4   Tu     0
# 10    5   Tu     1
# 11    1   We     1
# 12    2   We     1
# 13    3   We     1
# 14    4   We     0
# 15    5   We     0
# 16    1   Th     0
# 17    2   Th     1
# 18    3   Th     1
# 19    4   Th     0
# 20    5   Th     0
# 21    1   Fr     0
# 22    2   Fr     1
# 23    3   Fr     1
# 24    4   Fr     1
# 25    5   Fr     1
sched <- melt(sched)
sched[sched$value == 1, ]