-1
data=data.frame("name"=c("Jimmy","Ellie","Lashay","Kristyn","Gloria","Carmen","Monica","Nicky","Kirby","Corrie","Dwayne","Janee","Nova","Bruce","Denita","Vickie","Ramon","Jacquline","Myrtice","Nadene","Jimmy","Ellie","Lashay","Kristyn","Gloria","Carmen","Monica","Nicky","Kirby","Corrie","Dwayne","Janee","Nova","Bruce","Denita","Vickie","Ramon","Jacquline","Myrtice","Nadene","Jimmy","Ellie","Lashay","Kristyn","Gloria","Carmen","Monica","Nicky","Kirby","Corrie","Dwayne","Janee","Nova","Bruce","Denita","Vickie","Ramon","Jacquline","Myrtice","Nadene"),
"score"=c("71","83","58","72","80","89","74","76","46","81","60","84","80","95","44","61","93","93","59","52","99","97","96","76","56","89","46","71","64","47","57","62","51","98","54","94","44","90","41","52","62","93","48","44","89","52","87","69","54","65","74","81","78","67","63","93","80","100","54","94"),
"class"=c("literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities"))

每个学生每个科目都有 1 分,因此每个学生代表 3 次。

首先,我想按科学类别的分数(从高到低)对名称进行排序。

data=data[order(data$score,data$name,data$class=="science"),] #this is my attempt

其次,我想存储科学类别的名称顺序。

#I am unsure how to do this

第三,我希望复制第 2 步中存储的名称顺序

#I am unsure how to do this

第四,我希望​​将有序名称与每个科目的分数相匹配。

#I am unsure how to do this

这是一个更基本的示例: 拥有:

Name    Score    Subject
John      5         literature
Jack      4         literature
Jill      2         literature
John      7         science
Jack      9         science
Jill      10        science

想:

name    jill    jack    john
science    10    9      7
literature  2    4      5
4

2 回答 2

1
data=data.frame("name"=c("Jimmy","Ellie","Lashay","Kristyn","Gloria","Carmen","Monica","Nicky","Kirby","Corrie","Dwayne","Janee","Nova","Bruce","Denita","Vickie","Ramon","Jacquline","Myrtice","Nadene","Jimmy","Ellie","Lashay","Kristyn","Gloria","Carmen","Monica","Nicky","Kirby","Corrie","Dwayne","Janee","Nova","Bruce","Denita","Vickie","Ramon","Jacquline","Myrtice","Nadene","Jimmy","Ellie","Lashay","Kristyn","Gloria","Carmen","Monica","Nicky","Kirby","Corrie","Dwayne","Janee","Nova","Bruce","Denita","Vickie","Ramon","Jacquline","Myrtice","Nadene"),
                "score"=c("71","83","58","72","80","89","74","76","46","81","60","84","80","95","44","61","93","93","59","52","99","97","96","76","56","89","46","71","64","47","57","62","51","98","54","94","44","90","41","52","62","93","48","44","89","52","87","69","54","65","74","81","78","67","63","93","80","100","54","94"),
                "class"=c("literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","literature","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","science","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities","humanities"),
                stringsAsFactors = F) ### don't convert to factors!

data %>% mutate(score=as.numeric(score)) %>% # convert scores to numeric for sorting
  arrange(desc(score,class)) %>% group_by(class) %>% 
  mutate(place=seq(1,n())) %>% ungroup() %>% 
  select(-score) %>%
  # spread(class,name)
  reshape2::dcast(class~place,value.var = 'name')

       class         1      2         3      4      5         6      7       8     9     10     11
1 humanities Jacquline Nadene     Ellie Vickie Gloria    Monica  Janee   Ramon  Nova Dwayne  Nicky
2 literature     Bruce  Ramon Jacquline Carmen  Janee     Ellie Corrie  Gloria  Nova  Nicky Monica
3    science     Jimmy  Bruce     Ellie Lashay Vickie Jacquline Carmen Kristyn Nicky  Kirby  Janee
       12     13     14     15      16      17     18     19      20
1   Bruce Corrie Denita  Jimmy   Kirby Myrtice Carmen Lashay Kristyn
2 Kristyn  Jimmy Vickie Dwayne Myrtice  Lashay Nadene  Kirby  Denita
3  Dwayne Gloria Denita Nadene    Nova  Corrie Monica  Ramon Myrtice

或者,如果你只是想传播你的原始数据......

data %>% spread(name,score)

       class Bruce Carmen Corrie Denita Dwayne Ellie Gloria Jacquline Janee Jimmy Kirby Kristyn Lashay
1 humanities    67     52     65     63     74    93     89       100    81    62    54      44     48
2 literature    95     89     81     44     60    83     80        93    84    71    46      72     58
3    science    98     89     47     54     57    97     56        90    62    99    64      76     96
  Monica Myrtice Nadene Nicky Nova Ramon Vickie
1     87      54     94    69   78    80     93
2     74      59     52    76   80    93     61
3     46      41     52    71   51    44     94
于 2019-07-25T19:28:43.247 回答
0

这是一种方法dplyr-

data %>% 
  spread(name, score, convert = T) %>% 
  select(1, order(.[.$class == "science", -1], decreasing = T) + 1)

       class Jimmy Bruce Ellie Lashay Vickie Jacquline Carmen Kristyn Nicky Kirby Janee Dwayne Gloria Denita Nadene Nova Corrie Monica Ramon Myrtice
1 humanities    62    67    93     48     93       100     52      44    69    54    81     74     89     63     94   78     65     87    80      54
2 literature    71    95    83     58     61        93     89      72    76    46    84     60     80     44     52   80     81     74    93      59
3    science    99    98    97     96     94        90     89      76    71    64    62     57     56     54     52   51     47     46    44      41
于 2019-07-25T20:48:38.097 回答