簡體   English   中英

根據另一列中的值對 R dataframe 中的列進行分組

[英]group columns in R dataframe based on values in another column

考慮以下一對列表

 ID<-c("A", "B")
 Var2<-c("T_X", "X_F", "R_X", "T_Y", "Y_F", "R_Y")

我創建了以下 dataframe

df2<-expand.grid(ID, Var2)

得到的 dataframe 如下

   Var1 Var2
1     A  T_X
2     B  T_X
3     A  X_F
4     B  X_F
5     A  R_X
6     B  R_X
7     A  T_Y
8     B  T_Y
9     A  Y_F
10    B  Y_F
11    A  R_Y
12    B  R_Y

我想按 Var1 列對 dataframe 重新排序,以便與 A 對應的所有值都在一起,並且與 B 一樣。(注意這是一個玩具數據集,Var1 中唯一值的實際數量可能要高得多)。

以下是預期的output

   Var1 Var2
1     A  T_X
3     A  X_F
5     A  R_X
7     A  T_Y
9     A  Y_F
11    A  R_Y
2     B  T_X
4     B  X_F
6     B  R_X
8     B  T_Y
10    B  Y_F
12    B  R_Y

我試過 df2%>% group_by(Var1)。 這使 dataframe 保持不變。

我請求有人在這里幫助我。

我們可以反過來做。 之后無需任何order或任何包裹

setNames(expand.grid(Var2, ID)[2:1], c("Var1", "Var2"))

-輸出

#    Var1 Var2
#1     A  T_X
#2     A  X_F
#3     A  R_X
#4     A  T_Y
#5     A  Y_F
#6     A  R_Y
#7     B  T_X
#8     B  X_F
#9     B  R_X
#10    B  T_Y
#11    B  Y_F
#12    B  R_Y

或者使用來自tidyrcrossing

library(tidyr)
crossing(ID, Var2 = factor(Var2, levels = Var2))

-輸出

#   ID    Var2 
#   <chr> <chr>
# 1 A     T_X  
# 2 A     X_F  
# 3 A     R_X  
# 4 A     T_Y  
# 5 A     Y_F  
# 6 A     R_Y  
# 7 B     T_X  
# 8 B     X_F  
# 9 B     R_X  
# 10 B     T_Y  
# 11 B     Y_F  
# 12 B     R_Y  

您可以使用tidyrexpand_grid ,它在此處按預期工作。

tidyr::expand_grid(ID, Var2)

#   ID    Var2 
#   <chr> <chr>
# 1 A     T_X  
# 2 A     X_F  
# 3 A     R_X  
# 4 A     T_Y  
# 5 A     Y_F  
# 6 A     R_Y  
# 7 B     T_X  
# 8 B     X_F  
# 9 B     R_X  
#10 B     T_Y  
#11 B     Y_F  
#12 B     R_Y  

但是,您始終可以order df2 output 以獲取所需格式的 output。

df2 <- expand.grid(ID, Var2)
df2[order(df2$Var1), ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM