R 根据标签重塑列表

R 根据标签重塑列表,r,reshape,R,Reshape,更新: 上面的数据并没有真正镜像我的数据,因此这里有一个更新: tag如果我们需要tag作为列名,则从data.table创建一个“tag”的序列列(rowid),并在dcast中使用该列来重塑为“wide” library(data.table) dcast(setDT(df), rowid(tag) ~ tag, value.var = 'content') 更新 根据更新,我们可能需要创建一个新列“ind”,以标记“ID”的出现 setDT(df)[, cumsum(tag == "\\

更新:

上面的数据并没有真正镜像我的数据,因此这里有一个更新:


tag如果我们需要
tag
作为列名,则从
data.table
创建一个“tag”的序列列(
rowid
),并在
dcast
中使用该列来重塑为“wide”

library(data.table)
dcast(setDT(df), rowid(tag) ~ tag, value.var = 'content')
更新 根据更新,我们可能需要创建一个新列“ind”,以标记“ID”的出现

setDT(df)[, cumsum(tag == "\\ID")]
dcast(df, ind ~ tag, value.var = 'content')
#   ind   \\a   \\b \\ID
#1:   1 text2 text3 ID_x
#2:   2  <NA> text6 ID_y
#3:   3 text7 text8 ID_z
#4:   4  <NA>  <NA> ID_f
#5:   5  <NA>  <NA> ID_g

如果我们需要
标记
作为列名,请从
data.table
中创建一个“tag”(
rowid
)的序列列,并在
dcast
中使用该列来重塑为“wide”

library(data.table)
dcast(setDT(df), rowid(tag) ~ tag, value.var = 'content')
更新 根据更新,我们可能需要创建一个新列“ind”,以标记“ID”的出现

setDT(df)[, cumsum(tag == "\\ID")]
dcast(df, ind ~ tag, value.var = 'content')
#   ind   \\a   \\b \\ID
#1:   1 text2 text3 ID_x
#2:   2  <NA> text6 ID_y
#3:   3 text7 text8 ID_z
#4:   4  <NA>  <NA> ID_f
#5:   5  <NA>  <NA> ID_g

经修订的问题如下:

df%
#创建一个适当的id列
变异(id=ifelse(tag==“\\id”,content,NA))%>%
#根据观察到的最后一个id填充所有id
tidyr::填充(id)%>%
#将数据格式化为所需的形状
tidyr::排列(标签、内容)%>%
#丢弃现在冗余的id列并重新排列列
选择(-id)%%>%
选择(`\\ID`,everything())
结果:

#   \\ID   \\a   \\b
# 1 ID_f  <NA>  <NA>
# 2 ID_g  <NA>  <NA>
# 3 ID_x text2 text3
# 4 ID_y  <NA> text6
# 5 ID_z text7 text8

经修订的问题如下:

df%
#创建一个适当的id列
变异(id=ifelse(tag==“\\id”,content,NA))%>%
#根据观察到的最后一个id填充所有id
tidyr::填充(id)%>%
#将数据格式化为所需的形状
tidyr::排列(标签、内容)%>%
#丢弃现在冗余的id列并重新排列列
选择(-id)%%>%
选择(`\\ID`,everything())
结果:

#   \\ID   \\a   \\b
# 1 ID_f  <NA>  <NA>
# 2 ID_g  <NA>  <NA>
# 3 ID_x text2 text3
# 4 ID_y  <NA> text6
# 5 ID_z text7 text8

我已经更新了示例数据。我意识到我没有提到某些唯一ID缺少变量。这就是为什么您的解决方案一开始似乎有效,因为前几个元素没有缺少值。当我检查完整个文件后,我意识到。谢谢你的帮助。我给它的data.set工作得很好,但当我把它应用到不同的数据集时,它会给我结果,每个单元格只填充1。它还显示消息“聚合函数丢失,默认为‘长度’”,有什么特别的想法吗?Thx@IskandarThePupsi这是重复的结果。我们可能需要创建一个序列列。如果你能展示一个关于这个问题的小例子,我可以更新我已经更新了这个例子的数据。我意识到我没有提到某些唯一ID缺少变量。这就是为什么您的解决方案一开始似乎有效,因为前几个元素没有缺少值。当我检查完整个文件后,我意识到。谢谢你的帮助。我给它的data.set工作得很好,但当我把它应用到不同的数据集时,它会给我结果,每个单元格只填充1。它还显示消息“聚合函数丢失,默认为‘长度’”,有什么特别的想法吗?Thx@IskandarThePupsi这是重复的结果。我们可能需要创建一个序列列。如果你能展示一个小例子,我可以更新