[英]How to combine multiple rows into one observation in R
我對R還是比較陌生,我很想嘗試將數據放入合適的格式。 似乎reshape軟件包可能對此有用,但是我對此沒有更多的了解。
我有一個數據框,其中一欄(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
我想得到這樣的東西:
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
編輯:我在V2中的觀察數並不總是相同的,這意味着我想要獲取的數據幀中可能缺少V4,V5或V6的值。
Edit2:V6應該映射到V3的“響應”變量,V4和V5最好以連續順序映射到V3的“聲音”值。
我將非常感謝您提供有關此問題的任何建議。 或者,如果這個問題在其他地方已經解決,而我卻錯過了,那么鏈接也將很棒。
您無需在df
的定義中使用cbind
。 您將使用以下內容:
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)
但是給定您所描述的數據框,您可以通過以下方式獲得所需的結果:
max.subset.len <- 3 # or maybe max(sapply(split(df, list(df$V1, df$V2)), FUN=nrow))
fun <- function(v4) {length(v4) <- max.subset.len; v4}
agg <- aggregate(df$V4, by=list(df$V1, df$V2), FUN=fun)
results <- cbind(agg[1:2], agg[[3]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.