我的数据集包含以下列名称:
df
X100_TT_7.1 X50_TT_1.1 X60_TT_2.1 X80_TT_4.1 X70_TT_3.1 X85_FTT_5.1 X90_TT_6.1
0.08 0.06 0.84 0.95 0.89 0.91 0.86
我想以下面的方式重新排列列,即按照1.1到7.1的列号:
df
X50_TT_1.1 X60_TT_2.1 X70_TT_3.1 X80_TT_4.1 X85_FTT_5.1 X90_TT_6.1 X100_TT_7.1
0.06 0.84 0.89 0.95 0.91 0.86 0.08
我试图使用order和substr函数解决相同问题,但没有得到解决方案。
答案 0 :(得分:1)
我们可以使用mixedorder
到gtools
列的order
library(gtools)
df1 <- df[mixedorder(names(df))]
df1
# X50_TT_1.1 X60_TT_2.1 X70_TT_3.1 X80_TT_4.1 X85_FTT_5.1 X90_TT_6.1 X100_TT_7.1
#1 0.06 0.84 0.89 0.95 0.91 0.86 0.08
或者它仅基于浮点数
df[order(as.numeric( sub(".*_", "", names(df))))]
# X50_TT_1.1 X60_TT_2.1 X70_TT_3.1 X80_TT_4.1 X85_FTT_5.1 X90_TT_6.1 X100_TT_7.1
#1 0.06 0.84 0.89 0.95 0.91 0.86 0.08
答案 1 :(得分:1)
通过基地R,
df[order(sub("^.*(.*)_", "\\1", names(df)))]
# X50_TT_1.1 X60_TT_2.1 X70_TT_3.1 X80_TT_4.1 X85_FTT_5.1 X90_TT_6.1 X100_TT_7.1
#1 0.06 0.84 0.89 0.95 0.91 0.86 0.08
答案 2 :(得分:0)
另一个基础R尝试:
df[,order(as.numeric(lapply(strsplit(names(df),"_"),tail,1)))]
# X50_TT_1.1 X60_TT_2.1 X70_TT_3.1 X80_TT_4.1 X85_FTT_5.1 X90_TT_6.1 X100_TT_7.1
#1 0.06 0.84 0.89 0.95 0.91 0.86 0.08