Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将R中的重复行转换为独立列_R - Fatal编程技术网

将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)))