我有這樣一個資料框架
a < - c("5*",/span> 7。 9, "11***")
b < - c("-8*"。 "-10*"。 -3, -1)
c < - c(-4。 -1, "-6**", "3*")
df <- data. frame(a,b,c)
a b c
1 5* - 8* -4
2 7 -10* - 1
3 9 -3 -6**
4 11*** -1 3*
那么我希望行中的最大凈值被排序(只考慮那些至少有一個 "*"的值),獨立于列。我的意思是,我希望有這樣的結果:
a b c
4 11*** -1 3*
2 7 -10* - 1
1 5* - 8* -4
3 9 -3 -6**
你可以看到它被排序了,因為第一行的值是11***,第二行(-10*),第三行(-8*),第四行(-6**)。你可以注意到,在最后一行的排序中,9被省略了,這是因為我們只想考慮那些至少有一個 "*"的數字
。uj5u.com熱心網友回復:
一種方法--在*的后綴值中獲取abs的絕對值max,根據這些創建一個order索引,并使用它來重新排序行
df[/span>order(-應用(df。 1。 FUN = function(x)
max(abs(as. numeric(sub("* "/span>。 ""。 x[grep("`*"。 x)] )))))))。 ]
輸出
a b c
4 11*** -1 3*
2 7 -10* - 1
1 5* - 8* -4
3 9 -3 -6**
或者使用tidyverse,用pivot_longer重塑為 "長 "格式,filter只過濾有*的元素,arrange對數字部分進行提取(parse_number),slice根據行數排列原始行
library(dplyr)
library(stringr)
library(tidyr)
df %>%。
mutate(rn = row_number()) %> %
pivot_longer(cols = -rn) %>%
filter(str_detect(value, fixed("*")) %> %
arrange(desc(abs(readr: 。 parse_number(value)))) %> %
distinct(rn) %> %
拉(rn) %>%
slice(df,.)
輸出
a b c
1 11*** -1 3*
2 7 -10* - 1
3 5* - 8* -4
4 9 -3 -6**
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322180.html
標籤:
上一篇:在資料框架的數字中放置小圓點
下一篇:在R中對時間的數值進行格式化
