我想按多列对data.frame进行排序.例如,对于下面的data.frame,我想按列z(降序)然后按列b(升序)排序:
dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"),
levels = c("Low", "Med", "Hi"), ordered = TRUE),
x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
z = c(1, 1, 1, 2))
dd
b x y z
1 Hi A 8 1
2 Med D 3 1
3 Hi A 9 1
4 Low C 9 2
Run Code Online (Sandbox Code Playgroud) 这可能是一个简单的问题,但我不知道如何按字母顺序排列.
test = data.frame(C = c(0, 2, 4, 7, 8), A = c(4, 2, 4, 7, 8), B = c(1, 3, 8, 3, 2))
# C A B
# 1 0 4 1
# 2 2 2 3
# 3 4 4 8
# 4 7 7 3
# 5 8 8 2
Run Code Online (Sandbox Code Playgroud)
我喜欢按字母顺序按列名排序,以实现
# A B C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 …Run Code Online (Sandbox Code Playgroud) 鉴于数据:
library(data.table)
DT = data.table(category=LETTERS[1:3], b=1:3)
DT
# category b
# 1: A 1
# 2: B 2
# 3: C 3
Run Code Online (Sandbox Code Playgroud)
使用dplyr,如何重新排列行来获得特定的顺序c("C", "A", "B")中category?
# category b
# 1: C 3
# 2: A 1
# 3: B 2
Run Code Online (Sandbox Code Playgroud) 我正在尝试根据系统发育树中的尖端标签来排序数据帧的行.我要这样做的方法是使用match类似于这个问题的答案的函数,但是我被卡住了因为如果你使用函数重新排序节点tip.label,apephylo对象的属性不会改变ladderize.
library(ape)
tree <- read.tree(text = "(((A,B),(C,D)),E);")
tree2 <- ladderize(tree, right = FALSE)
tree$tip.label
#> [1] "A" "B" "C" "D" "E"
tree2$tip.label
#> [1] "A" "B" "C" "D" "E"
Run Code Online (Sandbox Code Playgroud)
请注意,tip.label即使树的可视化表示没有改变,它的顺序也没有改变.在这个简单的例子中,ladderize函数之后树的视觉顺序是E A B C D(在绘图后从树的底部到顶部读取).如何获取tip.label向量的副本,其中顺序反映树中节点的新顺序?
我是一个新的R用户,也是StackOverflow的新用户.我会尽力简明扼要地问我的问题,如果没有以最好的方式传达我的道歉.
我正在使用两个数据帧.我想重新排序一个数据帧的行,以便它与第二个数据帧中的行的顺序相同,这样我就可以将数据从一个添加到另一个,其格式相同.我想根据行重新排序的列是具有不同观察区域的字符串标识符的列.
第一个数据帧"dfverif"看起来(总结)就像
Variable Value
DAFQX 9
DAFQX 9
DAFQX 9
DAFQX 9
DAHEI 9
DAHEI 9
DAHEI 9
DAHEI 9
BAARG 9
BAARG 9
BAARG 9
BAARG 9
CBUCG 9
CBUCG 9
CBUCG 9
CBUCG 9
DALZZ 9
DALZZ 9
DALZZ 9
DALZZ 9
Run Code Online (Sandbox Code Playgroud)
第二个数据帧"dfmax"看起来像
variable value
DALZZ 2.14
DALZZ 2.02
DALZZ 2.04
CBUCG 1.83
CBUCG 2.09
CBUCG 1.96
CBUCG 1.98
DAHEI 2.25
DAHEI 2.05
DAHEI 2.08
DAFQX 2.12
DAFQX 2.12
DAFQX 2.04
BAARG 2.12
BAARG 2.56
BAARG 2.56 …Run Code Online (Sandbox Code Playgroud) 我想像这样对 df 进行排序:
library(dplyr)
tags <- c("F23-F45", "A69-1008-1", "A69-1008-10", "A69-1008-10", "A69-1008-100", "A69-1008-12")
animal_names <- c("Dim","Dami", "Pet", "Nic", "Li", "Tan")
df <- tibble(tag = tags, animal_name = animal_names)
# A tibble: 6 x 2
tag animal_name
<chr> <chr>
1 F23-F45 Dim
2 A69-1008-1 Dami
3 A69-1008-10 Pet
4 A69-1008-10 Nic
5 A69-1008-100 Li
6 A69-1008-12 Tan
Run Code Online (Sandbox Code Playgroud)
我想先按 排序tag,然后再按 排序animal_name。通常我使用arrange()dplyr 包的功能来完成此操作。这将导致这个 df:
> df %>% arrange(tag, animal_name)
# A tibble: 6 x 2
tag animal_name
<chr> …Run Code Online (Sandbox Code Playgroud) 我有一个数据框 df:
df <- data.frame(a = c("b2","d2","a1","c1"), b = c(12, 3, 54, 4))
> df
a b
1 b2 12
2 d2 3
3 a1 54
4 c1 4
Run Code Online (Sandbox Code Playgroud)
和一个外部向量,我希望其顺序a匹配:
vec <- c("a1","b2","c1","d2")
Run Code Online (Sandbox Code Playgroud)
通常我可以使用以下方法执行此操作match:
df <- df[match(vec, df$a),]
> df
a b
3 a1 54
1 b2 12
4 c1 4
2 d2 3
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有办法在 dplyr 中做到这一点。我尝试过以下方法,但没有成功:
df <- df %>%
mutate(
a = match(vec, a)
)
> df
a b
1 3 12
2 1 …Run Code Online (Sandbox Code Playgroud)