使用第二个数据帧作为参考来排序R数据帧列。

时间:2016-12-18 04:47:52

标签: r

我正在使用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不匹配。

由于

1 个答案:

答案 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