在R中如何将多行合并为一个观测值
我对R相对来说比较陌生,而且我在尝试将我的数据转换成合适的格式时有些犹豫。似乎重塑包对此很有用,但我没有得到更多 我有一个数据框,其中一列(V4)包含字符串和数字。我想按照V2和V1中给出的分组来拆分V4,并将结果作为三个独立的列附加到数据框中 编辑:由于我最初的示例数据框没有完全捕捉到问题的复杂性,下面是一个更准确的示例:在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,
>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教练建议使用重塑()函数。那也很好用!