我正在使用R开发统计程序,该程序接受两个dataFrame。第一个dataFrame携带患者的人口统计信息,第二个数据携带他们的临床信息。人口统计数据dataFrame中的关键列是patientID列。而在临床数据框架中,每个患者ID都是一列。我希望根据临床数据框架中patientID(ind列)的顺序,通过patientID安排/排序我的人口统计数据dataFrame。 ID也可以是数字或字母数字,也可以是某些字母序列。我能够编写一些代码,但是需要帮助/指导才能找到一种更好的方法来对列进行排序,而不管它们的数据类型(字符,因子,数字等)。
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不匹配。
由于
答案 0 :(得分:1)
让我们从创建两个示例数据框开始:
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")
这给了我们:
> demog
ID state
1 1.234568e+14 FL
2 1.234000e+03 NJ
3 1.234568e+09 CA
4 1.230000e+02 TX
和
> clinical
1234567890 123 123456789012345 1234
1 1 3 1 6
2 2 4 7 4
3 3 5 9 2
正如您所看到的,demog
中的行与clinical
中的列的顺序不同。
要对demog
中的行进行排序:
rownames(demog) = demog$ID
demog = demog[colnames(clinical),]
即使对于因子或字符的ID,这也适用,因为rownames()
会将它们转换为字符。
结果:
> demog
ID state
1234567890 1.234568e+09 CA
123 1.230000e+02 TX
123456789012345 1.234568e+14 FL
1234 1.234000e+03 NJ