在R中如何将多行合并为一个观测值

在R中如何将多行合并为一个观测值,r,dataframe,R,Dataframe,我对R相对来说比较陌生,而且我在尝试将我的数据转换成合适的格式时有些犹豫。似乎重塑包对此很有用,但我没有得到更多 我有一个数据框,其中一列(V4)包含字符串和数字。我想按照V2和V1中给出的分组来拆分V4,并将结果作为三个独立的列附加到数据框中 编辑:由于我最初的示例数据框没有完全捕捉到问题的复杂性,下面是一个更准确的示例: >df <- data.frame(V1=c(rep("SN", 8),rep("JK", 4)), V2=c(1,1,2,2,2,

我对R相对来说比较陌生,而且我在尝试将我的数据转换成合适的格式时有些犹豫。似乎重塑包对此很有用,但我没有得到更多

我有一个数据框,其中一列(V4)包含字符串和数字。我想按照V2和V1中给出的分组来拆分V4,并将结果作为三个独立的列附加到数据框中

编辑:由于我最初的示例数据框没有完全捕捉到问题的复杂性,下面是一个更准确的示例:

>df <- data.frame(V1=c(rep("SN", 8),rep("JK", 4)), 
             V2=c(1,1,2,2,2,3,3,3,1,1,2,2), 
             V3=c("Picture", "Response", "Sound", "Sound", "Response", "Sound", "Sound", "Response", "Sound", "Response", "Sound", "Sound"), 
             V4=c("Photo", "100", "XYZc02i03", "XYZq02i03", 200, "ZYXc01i30", "ZYXq01i30", 100, "XYZc02i40", 200, "XYZc02i03", "XYZq02i03" ), 
             stringsAsFactors=FALSE)


>V1 V2       V3        V4
 SN  1  Picture     Photo
 SN  1 Response       100
 SN  2    Sound XYZc02i03
 SN  2    Sound XYZq02i03
 SN  2 Response       200
 SN  3    Sound ZYXc01i30
 SN  3    Sound ZYXq01i30
 SN  3 Response       100
 JK  1    Sound XYZc02i40
 JK  1 Response       200
 JK  2    Sound XYZc02i03
 JK  2    Sound XYZq02i03
编辑:我在V2中并不总是有相同数量的观察值,这意味着在我想要获取的数据帧中可能缺少V4、V5或V6的值

Edit2:V6应该映射到V3、V4和V5中的“response”变量,理想情况下,应该以连续的顺序映射到V3中的“Sound”值


如果你能给我一些建议,我将不胜感激。或者,如果这个问题在其他地方解决了,而我错过了它,链接也会很好。

在定义
df
时,您不需要
cbind
。您可以使用如下内容:

   V1  V2       V3          V4        V5   V6
   SN   1  Picture       Photo        NA  100
   SN   2    Sound   XYZc02i03 XYZq02i03  200
   SN   3    Sound   ZYXc01i30 ZYXq01i30  100
   JK   1    Sound   XYZc02i40        NA  200
   JK   2    Sound   XYZc02i03 XYZq02i03   NA
df <- data.frame(V1=rep("SN", 6), 
                 V2=rep(2:3, each=3), 
                 V3=c("Sound", "Sound", "Response", "Sound", "Sound", "Response"), 
                 V4=c("XYZc02i03", "XYZq02i03", 200, "ZYXc01i30", "ZYXq01i30", 100), 
                 stringsAsFactors=FALSE)

df在定义
df
时不需要
cbind
。您可以使用如下内容:

   V1  V2       V3          V4        V5   V6
   SN   1  Picture       Photo        NA  100
   SN   2    Sound   XYZc02i03 XYZq02i03  200
   SN   3    Sound   ZYXc01i30 ZYXq01i30  100
   JK   1    Sound   XYZc02i40        NA  200
   JK   2    Sound   XYZc02i03 XYZq02i03   NA
df <- data.frame(V1=rep("SN", 6), 
                 V2=rep(2:3, each=3), 
                 V3=c("Sound", "Sound", "Response", "Sound", "Sound", "Response"), 
                 V4=c("XYZc02i03", "XYZq02i03", 200, "ZYXc01i30", "ZYXq01i30", 100), 
                 stringsAsFactors=FALSE)

df您的输出示例与您的输入示例不一致(例如,df中不存在XYZc02s03)。请提供一个有效的例子。不,不总是这样。还有带“回复”的“图片”。我也可以有2个“声音”,但没有“回应”,如果没有回应。此外,如果跳过了第二个声音,则只能有一个带有“响应”的“声音”。输出示例与输入示例不一致(例如,df中不存在XYZc02s03)。请提供一个有效的例子。不,不总是这样。还有带“回复”的“图片”。我也可以有2个“声音”,但没有“回应”,如果没有回应。此外,如果第二个声音被跳过,则只能有一个带有“Response”的“Sound”。谢谢,这样做很有效……但是,我有不同的行数,因为我在V2中并不总是有一个好的三元组。如何使cbind在不同行数下工作?@kat:您应该编辑测试数据以反映问题的复杂性。请试着想想“边缘”(或退化)案例。@mplourde:再次感谢!而且,我刚刚意识到我需要的比我想象的还要困难。关于如何将V4中的值映射到相应的列中,有什么想法吗?(参见上面问题中的我的edit2。)我的R教练建议使用重塑()函数。那也很好用!谢谢,这样做的技巧…然而,我有不同的行数,因为我不总是有一个很好的三元组在V2。如何使cbind在不同行数下工作?@kat:您应该编辑测试数据以反映问题的复杂性。请试着想想“边缘”(或退化)案例。@mplourde:再次感谢!而且,我刚刚意识到我需要的比我想象的还要困难。关于如何将V4中的值映射到相应的列中,有什么想法吗?(参见上面问题中的我的edit2。)我的R教练建议使用重塑()函数。那也很好用!