重新排列R中的数据框列(mutate,dplyr)

use*_*605 5 r dataframe dplyr

我有一个像这样的数据框架

Type  Number  Species
A     1         G    
A     2         R 
A     7         Q
A     4         L
B     4         S
B     5         T
B     3         H
B     9         P
C     12        K
C     11        T
C     6         U
C     5         Q
Run Code Online (Sandbox Code Playgroud)

我在哪里使用过group_by(Type)我的目标是通过让NUMBER成为数字列中的前2个值,然后创建一个新的列(Number_2)作为第二个2值来折叠这些数据.此外,我希望删除底部两个数字的Species值,以便物种对应于我想使用dplyr的行中较高的数字,而final将看起来像这样

Type  Number Number_2   Species       
A     7    1               Q
A     4    2               L 
B     5    3               T
B     9    4               P
C     12   6               K
C     11   5               T
Run Code Online (Sandbox Code Playgroud)

截至目前,number_2所在的顺序并不重要,只要它是相同的类型....我不知道这是否可能,但如果它是谁有人知道如何...

谢谢!

akr*_*run 7

你可以试试

library(data.table)
setDT(df1)[order(-Number), list(Number1=Number[1:2], 
                                Number2=Number[3:4],
                                Species=Species[1:2]), keyby = Type]
 #   Type Number1 Number2 Species
 #1:    A       7       2       Q
 #2:    A       4       1       L
 #3:    B       9       4       P
 #4:    B       5       3       T
 #5:    C      12       6       K
 #6:    C      11       5       T
Run Code Online (Sandbox Code Playgroud)

或者使用dplyrdo

 library(dplyr)
 df1 %>% 
   group_by(Type) %>%
   arrange(desc(Number)) %>%
   do(data.frame(Type=.$Type[1L],
                Number1=.$Number[1:2], 
                Number2 = .$Number[3:4],
                Species=.$Species[1:2], stringsAsFactors=FALSE))
 #   Type Number1 Number2 Species
 #1    A       7       2       Q
 #2    A       4       1       L
 #3    B       9       4       P
 #4    B       5       3       T
 #5    C      12       6       K
 #6    C      11       5       T
Run Code Online (Sandbox Code Playgroud)

  • 我正在发布同样的事情,因为我不认为只需使用`dplyr`就可以完成.作为旁注,你不需要`[order(Type)]`,只需使用`keyby`而不是`by` (2认同)
  • 似乎应该可以创建一个`c(1,1,2,2)`变量然后`dcast`,但我没有技能或工具.在Arun的新幻灯片上搜索这样的东西(搜索"dcast"):来自dplyr的https://github.com/Rdatatable/data.table/wiki/talks/ArunSrinivasanUseR2015.pdf`do`似乎总是一个坏主意. (2认同)