StackOverFlow に関する次の質問と、他の R ヘルプ ブックへのリンクを確認しました。
R: データをロングからワイドにリシェイプ - リシェイプ パラメータを理解する
複数のグループ化を使用して、長いものから広いものへと形状を変更します
ロングフォーマットからワイドフォーマットにデータを再形成する方法は?
http://www.cookbook-r.com/Manipulating_data/Converting_data_between_wide_and_long_format/
長い形式 (2 列、6200 エントリ) のデータを、列 "id" に一意ではない名前を持ち、"sequence" に異なるシーケンスを持ち、列ヘッダーが "各 id の下にリストされている「sequence」からのすべてのシーケンスを含む「id」。
id sequence
1 CK1alpha TPSIAsDISLP
2 CK1alpha IASDIsLPIAT
3 CDK1 SVPSSsPGTSV
4 CDK1 EGCQGsPQRRG
5 CK1alpha DICEDsDIDGD
6 PKCepsilon IHGSDsVKSAE
私が取得したいもの:
id CK1alpha CDK1 PKCepsilon
sequence TPSIAsDISLP SVPSSsPGTSV
IASDIsLPIAT EGCQGsPQRRG
DICEDsDIDGD
私は使用しようとしましたreshape
kinase_sub_wide <- reshape(kinase_substrate, idvar = "id", timevar = "sequence", direction = "wide")
ただし、複数の行が一致するという警告メッセージが表示されます。
Warning messages:
1: In reshapeWide(data, idvar = idvar, timevar = timevar, ... :
multiple rows match for sequence=TPSIAsDISLP: first taken
2: In reshapeWide(data, idvar = idvar, timevar = timevar, ... :
multiple rows match for sequence=IASDIsLPIAT: first taken
3: In reshapeWide(data, idvar = idvar, timevar = timevar, ... :
multiple rows match for sequence=RSQSRsNSPLP: first taken
私も使ってみましたspread
kinase_substrate_wide <- spread(kinase_substrate, id, sequence)
しかし、重複した識別子でエラーが発生します:
> kinase_substrate_wide <- spread(kinase_substrate, id, sequence)
Error: Duplicate identifiers for rows (1812, 1813, 4469), (906, 3349), (253, 285, 2114, 2174, 3022, 4385, 4501), (155, 203, 218, 261, 316, 542, 682, 1021, 1123, 1238, 1492, 1919, 1938, 1997, 2064, 2139, 2323, 2387, 2597, 2826, 3058, 3377, 3899, 4024, 4135, 4241, 4314, 4617, 4733, 5055, 5289, 5467, 5726, 5952, 6165), (72, 272, 749, 1100, 2792, 3573, 3858, 4254, 4257), (209, 548, 637, 653, 1034, 1038, 1213, 1387, 1445, 1475, 1476, 1692, 1735, 2635, 3180, 4005, 4661, 4988, 5672, 5870, 6042), (21, 1802), (23, 24, 30, 49, 60, 86, 122, 127, 137, 177, 182, 227, 250, 260, 268, 270, 299, 347, 356, 361, 400, 424, 425, 448, 483, 488, 494, 509, 510, 512, 522, 523, 524, 540, 559, 572, 612, 614, 616, 622, 720, 750, 774, 794, 816, 820, 829, 866, 868, 912, 916, 918, 940, 946, 955, 962, 984, 992, 1004, 1013, 1054, 1055, 1070, 1073, 1083, 1086, 1105, 1140, 1154, 1164, 1179, 1222, 1228, 1230, 1284, 1295, 1316, 1318, 1333, 1334, 1348, 1356, 1375, 1383, 1389, 1390, 1406, 1421, 1444, 1458, 1473, 1474, 1490
上記の関数のいずれかを使用して、データをワイド形式にし、対応する各シーケンスを id の列の下に移動するにはどうすればよいですか?
前もって感謝します。
編集#1
提案を使用して、Davidのコメントからのインデックスを含めると、そこにたどり着きます
reshape(transform(df, indx = ave(as.character(id), id, FUN = seq)), idvar = "indx", timevar = "id", direction = "wide")
これは次のようになります。
indx sequence.CK1alpha sequence.CDK1 sequence.PKCepsilon sequence.GRK2 sequence.ICK sequence.CDK5 sequence.PKCbeta sequence.PAK1 sequence.GSK3beta
1 1 TPSIAsDISLP SVPSSsPGTSV IHGSDsVKSAE DIDESsPGTEW VDRLQsEPESI AQAPSsPRVTE GAQAPsSPRVT AQERPsQAAPA NIDNLsPKASH
2 2 IASDIsLPIAT EGCQGsPQRRG KLSGLsFKRNR EKKEEsEESDD DNRVPsPPPTG PAEVKsPEKAK DESTGsIAKRL RSRTPsASNDD FNYNPsPRKSS
5 3 DICEDsDIDGD TLNSGsPEKTC TALAPsTMKIK EESEEsDDDMG PDTKDsPVCPH QKPAAsPRPRR IVENLsSRCSW KQKVDsLLENL SSGAKsPSKSG
7 4 TFEDLsDVEGG HVAVSsPTPET VAKRLsLTMGG MNSSIsSGSGS LKVEGsPTEEA DFTCGsPTAAG YPVSPsDKVLI RALRAsESGI_ FPDDLsLDHSD
16 5 PRSGRsPTGNT TEVPRsPKHAH EKLVLsKLYEE RPTSIsWDGLD ESERGsGSQSS SDTVTsPQRAG EKKVVsLNGEL PGSPLsSQPVL YSDSIsPFNKS
29 6 MSDTGsPGMQR KYSPTsPTYSP EILNRsPRNRK KNRPTsISWDG <NA> GRGAEsPFEEK LVNSAsAQKRS SSKTAsLPGYG PSRTAsFSESR
編集#2
reshape 関数に「sequence」を入れないようにする方法はありますか。それぞれの名前の前に? または、すべての列名の名前を変更するために正規表現を使用する必要がありますか?
編集#3
列名からgsub
削除し、変数に割り当てるために使用されます。"sequence."
new_col_names <- names(DF) <- gsub("sequence.", "", names(DF))
その後new_col_names
、データフレームに適用します
colnames(DF) <- new_col_names
みんな助けてくれてありがとう!