![](/img/trans.png)
[英]How to convert a numeric vector to a character vector as the numeric vector is printed to the screen?
[英]How to order data frame by numeric vector and character vector
我想通過數字向量和字符向量對數據框進行排序,以便我可以刪除代碼列中的重復項,保留值列中具有最高值的記錄。 但是,如果我的類別列有“YS”或“YS1”,那么即使值不是最高數字,我也想保留這些記錄
這是一個示例數據集:
Code <- c(2,2,3,5,3,7,8)
Value <- c(17,18,35,25,67,34,2)
Category <- c("YS", "DW", "YS1", "OS", "OS", "OS1", "GD")
Dataset <- data.frame(Code, Value, Category)
Code Value Category
1 2 17 YS
2 2 18 DW
3 3 35 YS1
4 5 25 OS
5 3 67 OS
6 7 34 OS1
7 8 2 GD
當我按代碼(升序)和值(降序)對數據進行排序並按代碼刪除重復記錄時,我的代碼 = 2 的“YS”記錄不會保留,因為它的值較低。
order_data <- Dataset[order(Dataset$Code, -Dataset$Value),]
dataset_nodup <- order_data[!duplicated(order_data$Code),]
Code Value Category
2 2 18 DW
5 3 67 OS
4 5 25 OS
6 7 34 OS1
7 8 2 GD
我想先按類別列排序,然后按值列排序,以便首先列出我的“YS”和“YS1”記錄。 我嘗試了以下方法,但它不起作用。
order_data <- Dataset[order(Dataset$Code, -Dataset$Category, -Dataset$Value),]
我希望我的 output 看起來像:
Code Value Category
1 2 17 YS
2 3 67 YS1
3 5 25 OS
4 7 34 OS1
5 8 2 GD
我們可以使用match
將帶有"YS"
和"YS1"
的Category
放在前面,然后刪除重復項
order_data <- Dataset[with(Dataset, order(match(Category, c("YS", "YS1")),
Code, -Value)),]
dataset_nodup <- order_data[!duplicated(order_data$Code),]
dataset_nodup
# Code Value Category
#1 2 17 YS
#3 3 35 YS1
#4 5 25 OS
#6 7 34 OS1
#7 8 2 GD
或使用dplyr
library(dplyr)
Dataset %>%
arrange(match(Category, c("YS", "YS1")), Code, desc(Value)) %>%
filter(!duplicated(Code))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.