按R中的多列对数据帧进行排序,不区分大小写
我有3个向量:按R中的多列对数据帧进行排序,不区分大小写,r,R,我有3个向量: n<-10e3 ch<-append(LETTERS,letters) a<-sample(ch,n,replace=TRUE) b<-sample(ch,n,replace=TRUE) c<-sample(ch,n,replace=TRUE) df<-data.frame(a,b,c) 但问题是,它是区分大小写的,结果是这样的: 5359 A a b 7325 A a B 7200 A a g
n<-10e3
ch<-append(LETTERS,letters)
a<-sample(ch,n,replace=TRUE)
b<-sample(ch,n,replace=TRUE)
c<-sample(ch,n,replace=TRUE)
df<-data.frame(a,b,c)
但问题是,它是区分大小写的,结果是这样的:
5359 A a b
7325 A a B
7200 A a g
9122 A a V
2144 A a W
5984 A a z
8349 A A e
5215 A A E
4007 A A f
3099 A A H
3220 A A i
7080 A A N
4963 A A r
9159 A A V
4219 A A w
9723 A b b
4463 A b h
7894 A b V
3765 A B a
8772 A B b
例如,如您所见,它在“A z”之后加上“A e”。如何使其不区分大小写?如果您不介意转到dplyr表单
@library(tidyverse)
df %>%
as_tibble() %>%
mutate(lowcase = tolower(paste(a,b,c))) %>%
arrange(lowcase)
# A tibble: 10,000 x 4
a b c lowcase
<fct> <fct> <fct> <chr>
1 a A D a a d
2 A A L a a l
3 a a N a a n
4 A A n a a n
5 a a w a a w
6 A a X a a x
7 A A Y a a y
8 a A Y a a y
9 A b A a b a
10 A B a a b a
@库(tidyverse)
df%>%
as_tible()%>%
变异(lowcase=tolower(粘贴(a,b,c)))%>%
排列(低格)
#一个tibble:10000 x 4
a、b、c低盒
1 a D a D a D
2 A L A L A L
3 a N a N
4 A n A n A n
5 a w a w a w
6a X A X
7 A Y A Y A Y
8 a Y a Y a Y
9 A b A b A A b A
10 A B A B A A B A
如果您不介意转到dplyr表单
@library(tidyverse)
df %>%
as_tibble() %>%
mutate(lowcase = tolower(paste(a,b,c))) %>%
arrange(lowcase)
# A tibble: 10,000 x 4
a b c lowcase
<fct> <fct> <fct> <chr>
1 a A D a a d
2 A A L a a l
3 a a N a a n
4 A A n a a n
5 a a w a a w
6 A a X a a x
7 A A Y a a y
8 a A Y a a y
9 A b A a b a
10 A B a a b a
@库(tidyverse)
df%>%
as_tible()%>%
变异(lowcase=tolower(粘贴(a,b,c)))%>%
排列(低格)
#一个tibble:10000 x 4
a、b、c低盒
1 a D a D a D
2 A L A L A L
3 a N a N
4 A n A n A n
5 a w a w a w
6a X A X
7 A Y A Y A Y
8 a Y a Y a Y
9 A b A b A A b A
10 A B A B A A B A
使用tolower
或toupper
在order
中的列中这是一个好问题的开始,Kamil,感谢您花费时间使其大部分可重复!然而,一些想法:(1)当使用随机数据时,如果您希望我们能够重现您的随机数据,请在提取随机性之前使用set.seed(42)
(或一些数字)。(2) 我们当然不需要生成包含10e3
行的帧,我认为8-10行就足够了。在这种情况下,我知道你有一个具体的例子,所以。。。也许你根本不需要随机性,你可以使用data.frame(a=c(…),b=c(…),c=c(…)
。使用tolower
或toupper
在order
中的列上使用order
这是一个好问题的开始,Kamil,谢谢你花时间让它几乎可以重现!然而,一些想法:(1)当使用随机数据时,如果您希望我们能够重现您的随机数据,请在提取随机性之前使用set.seed(42)
(或一些数字)。(2) 我们当然不需要生成包含10e3
行的帧,我认为8-10行就足够了。在这种情况下,我知道你有一个具体的例子,所以。。。也许您根本不需要随机性,您可以使用data.frame(a=c(…),b=c(…),c=c(…)
。