将R中的重复行转换为独立列
我有以下数据集:将R中的重复行转换为独立列,r,R,我有以下数据集: ID Date Op SS type 1 AR02 03-14 NA SS ET 2 AR02 03-14 NA SS ET 3 AR02 06-14 NA SS ET 4 AR03 31-14 NA SS ET 5 AR08 03-14 NA SS ET 6 AR09 03-14 NA SS EN 由于我有重复的
ID Date Op SS type
1 AR02 03-14 NA SS ET
2 AR02 03-14 NA SS ET
3 AR02 06-14 NA SS ET
4 AR03 31-14 NA SS ET
5 AR08 03-14 NA SS ET
6 AR09 03-14 NA SS EN
由于我有重复的行,我希望得到一个表,将所有重复的行作为单独的列追加。像这样的
ID Date Op SS type ID Date Op SS type ID Date Op SS type
1 AR02 03-14 NA SS ET AR02 03-14 NA SS ET AR02 06-14 NA SS ET
2 AR03 31-14 NA SS ET NA NA NA NA NA NA NA NA NA NA
3 AR08 03-14 NA SS ET NA NA NA NA NA NA NA NA NA NA
4 AR09 03-14 NA SS EN NA NA NA NA NA NA NA NA NA NA
我试图在R中实现这一点。我尝试了melt、transpose(t)、聚合函数,但不知何故无法得到正确的修复。任何帮助都将不胜感激 一个选项是将'data.frame'转换为'data.table'(
setDT(df1)
,按'ID'分组,我们将行粘贴到一起,然后使用cSplit
将粘贴的列('V1')拆分为单独的列。请注意,我没有重复'ID'列,因为它对于一行来说已经是唯一的
library(splitstackshape)
library(data.table)
DT <- setDT(df1)[, do.call(paste, c(.SD, list(collapse=', '))) , ID]
DT1 <- cSplit(DT, 'V1', sep='[ ,]+', fixed=FALSE, stripWhite=TRUE)
setnames(DT1, 2:ncol(DT1), rep(names(df1)[-1], 3))
DT1
# ID Date Op SS type Date Op SS type Date Op SS type
#1: AR02 03-14 NA SS ET 03-14 NA SS ET 06-14 NA SS ET
#2: AR03 31-14 NA SS ET NA NA NA NA NA NA NA NA
#3: AR08 03-14 NA SS ET NA NA NA NA NA NA NA NA
#4: AR09 03-14 NA SS EN NA NA NA NA NA NA NA NA
您能否详细说明所需的转换?如果AR02有6个重复的日期,您是否希望创建6列:date\n,每个列用于每个重复?您是否尝试过重塑(my.df,direction=“wide”,idvar=“ID”,timevar=“date”)
?我很好奇为什么您希望您的数据采用如此广泛的格式。谢谢Konrad。是的,这正是我想要得到的。您的建议很好,但在这种情况下,我仍然找到了一个重复的行(AR02)不是附加到其余部分。@DMC:我的实验数据就是这样设计的。这是我正在使用的数据集的一个小示例。它包括400多个样本和33列。只是为了方便查看一行中的所有样本以供进一步选择。是的,Akrun。谢谢,这是一个很大的帮助。从今年起,我就一直在这方面伤脑筋orning.非常感谢Akrun!您的修复非常完美!非常感谢。嗨Akrun,我有一个关于您的修复的问题。虽然修复工作非常完美,但有没有办法保留相应列的原始标题?@Hash更新了帖子,希望能有所帮助。感谢Akrun。>setnames(DT1,2:ncol(DT1),rep(names(df1)[-1],3))我仍然无法获取原始标题。我获取V1_001、V1_002等等。您能建议对此进行快速修复吗?此外,我希望保留Id列。我可以从rep(names(df1)[-1]中删除[-1]吗要做到这一点?Akrun,这是我的错。很抱歉,我使用的代码是另一个数据集上的代码。发现了我所犯的错误。无论如何,感谢您的帮助。
setnames(DT1, make.unique(names(DT1)))