Order R dataframe columns by using second dataframe as a reference.
我正在使用R开发统计程序,该程序接受两个dataFrames。第一个dataFrame携带患者的人口统计信息,第二个dataFrame携带他们的临床信息。人口统计数据框架中的关键列是PatientID列。在临床数据框中,每个患者ID均为一列。我希望根据临床数据框架中患者ID的(索引列)的顺序按患者ID排列/分类我的人口统计数据框架。 ID的编号也可以是数字或字母数字,也可以只是某些字母序列。我能够编写一些代码,但需要帮助/指导以提出一种更好的方式来对列进行排序,而不管它们的数据类型(字符,因子,数字等)如何。
1 2 3 4 5 6 7 8 9 10 11 12 13 | demogr = read.csv(mydemoFile, header = T, stringsAsFactors =TRUE,colClasses=c('factor','factor','factor','factor','factor')) demogr=demogr[order(as.numeric(demogr$Patient_ID)),] myClinicalFrame=fread(myInputFile,header=T,data.table=FALSE,sep=",") rowNames=myClinicalFrame[,1] myClinicalFrame[,1]<-NULL rownames(myClinicalFrame)=rowNames names(myClinicalFrame)=sort((names(myClinicalFrame))) |
以上内容适用于某些类型,但不适用于其他类型。例如:中的Patient_ID
demoFrame在数字上进行了排序,在某些情况下,R会更改Patient_ID,例如
109999345554545465到1.09e 18,它与第二个dataFrame不匹配。
谢谢
让我们从创建两个示例数据帧开始:
1 2 3 4 5 6 7 8 9 | patientID = c(123456789012345,1234,1234567890,123) state = c("FL","NJ","CA","TX") demog = data.frame(ID = patientID,state = state) clinical = data.frame(col1 = c(1,2,3), col2 = c(3,4,5), col2 = c(1,7,9), col2 = c(6,4,2)) colnames(clinical) = c("1234567890","123","123456789012345","1234") |
这给了我们:
1 2 3 4 5 6 | > demog ID state 1 1.234568e+14 FL 2 1.234000e+03 NJ 3 1.234568e+09 CA 4 1.230000e+02 TX |
和
1 2 3 4 5 | > clinical 1234567890 123 123456789012345 1234 1 1 3 1 6 2 2 4 7 4 3 3 5 9 2 |
您可以看到
要对
1 2 | rownames(demog) = demog$ID demog = demog[colnames(clinical),] |
即使对于作为因子或字符的ID,这也适用,因为
结果:
1 2 3 4 5 6 | > demog ID state 1234567890 1.234568e+09 CA 123 1.230000e+02 TX 123456789012345 1.234568e+14 FL 1234 1.234000e+03 NJ |