r - 根据外部列表对数据列表进行排序
问题描述
我有一个包含 81 个对象和 12 个变量的数据框,包括每个对象的 ID。此外,我有一个排序的(!)ID 列表。
现在,我想在这个特定列表之后对我的数据框进行排序。
任何人都可以为这种情况做一个简单的例子吗?
我是新手,正在努力学习。
提前致谢!
我的案例的快速示例:
ID City NR1 NR2
Dataframe1 = "11000", Berlin, (123,2), (532,1)
"02401", Hamburg, (435,2), (352,1)
"83329", München, (124,3), (125,2)
ID = list("02401", "83329", "11000")
现在,我希望 Dataframe1 在列表中的 ID 之后排序。
解决方案
您可以使用arrange()
.
一个例子: iris 数据集,如下所示:
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
creating an external vector:
index<-sample(1:150)
然后,您可以使用该外部向量对数据框进行排序:
head(arrange(iris, index))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 6.4 2.7 5.3 1.9 virginica
2 5.5 3.5 1.3 0.2 setosa
3 6.3 3.3 6.0 2.5 virginica
4 6.3 3.3 4.7 1.6 versicolor
5 4.9 2.5 4.5 1.7 virginica
6 5.7 2.8 4.5 1.3 versicolor
要按与变量之一匹配的特定外部向量进行排列,您可以使用match()
iris2<-head(iris)%>%mutate(ID=sample(1:150, 6))
> iris2
Sepal.Length Sepal.Width Petal.Length Petal.Width Species ID
1 5.1 3.5 1.4 0.2 setosa 29
2 4.9 3.0 1.4 0.2 setosa 61
3 4.7 3.2 1.3 0.2 setosa 69
4 4.6 3.1 1.5 0.2 setosa 89
5 5.0 3.6 1.4 0.2 setosa 59
6 5.4 3.9 1.7 0.4 setosa 84
external_vector<-c(69,59,84,29,61,89)
安排match()
:
iris2[match(external_vector, iris2$ID),]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species ID
3 4.7 3.2 1.3 0.2 setosa 69
5 5.0 3.6 1.4 0.2 setosa 59
6 5.4 3.9 1.7 0.4 setosa 84
1 5.1 3.5 1.4 0.2 setosa 29
2 4.9 3.0 1.4 0.2 setosa 61
4 4.6 3.1 1.5 0.2 setosa 89
推荐阅读
- three.js - 如何在 Autodesk Forge 中动态更新 THREE.js PointCloud 覆盖
- android - 如何在 Android 中保存和重新创建布局?
- c - 将大型 CSV 文件汇总到数组中的内存访问冲突
- java - 在某些情况下无法打印正确的结果
- solidity - 使用 web3 v1.0 发送原始交易的无效类型错误
- reactjs - React Router 5 不使用查询参数/状态重定向(剥离查询参数/状态)
- python - 如何使用 Python 制作字数计数器程序?
- c# - 从字符串 C# 中查找并提取一个数字
- c - 读取文件并将数据保存到二维数组中
- linear-programming - 如何线性化 AND 和 OR 约束的组合