我正在使用如下所示的数据框:
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,]
。
问题在于我真的不知道如何开始这样做。任何帮助都会被贬低。谢谢:))
答案 0 :(得分:2)
首先,确保从名称数据中获取数字。如果有更多名称表单,您可能需要调整示例。下面的示例删除t1
中数字之前的所有非数字,并将这些数字转换为数字以进行排序:
dig <- as.numeric(sub("[^[:digit:]]+", "", d$t1))
d[order(dig),]
您可以像Sam建议的那样向order
添加更多变量(列)。