如何按行中的名称对数据框进行排序?

时间:2015-12-23 22:07:02

标签: r sorting dataframe

我正在使用如下所示的数据框:

    d <- data.frame(t1=c("name No. 15", "name No. 15", "name No. 15", "name a No. 3", "name a No. 3", "name a No. 3", "name b No. 7", "name b No. 7", "name b No. 7"), t2=c("A", "B", "C", "A", "B", "C", "A", "B", "C"), t3=c(1207, 12965, 3453, 9084, 1234, 1239847, 345 , 9837, 879))
    print(d)

我希望它看起来像这样:

    o_d <- data.frame(t1=c("name a No. 3", "name a No. 3", "name a No. 3", "name b No. 7", "name b No. 7", "name b No. 7", "name No. 15", "name No. 15", "name No. 15"), t2=c("A", "B", "C", "A", "B", "C", "A", "B", "C"), t3=c(9084, 1234, 1239847, 345 , 9837, 879, 1207, 12965, 3453))

    print(o_d)

我想知道是否有办法使用第一列“名称”中的数字对df进行排序,以“排序”我想要的方式。

此外,我已经有了另一个看起来像这样的数据框:

    D<-data.frame(x=c("name a No. 3","name b No. 7","name No. 5"),freq=c(1250165, 11061, 17625))
    print(D)

如果没有办法使用“名称”,那么我想编写一个执行以下操作的函数:

设k为1到3之间的int,而m为1到9之间的另一个int 然后,如果d[m:m+2,1]==D[k,1]我想将d[m:m+2,]移至d[k:k+2,]

问题在于我真的不知道如何开始这样做。任何帮助都会被贬低。谢谢:))

1 个答案:

答案 0 :(得分:2)

首先,确保从名称数据中获取数字。如果有更多名称表单,您可能需要调整示例。下面的示例删除t1中数字之前的所有非数字,并将这些数字转换为数字以进行排序:

dig <- as.numeric(sub("[^[:digit:]]+", "", d$t1))
d[order(dig),]

您可以像Sam建议的那样向order添加更多变量(列)。