сортировка значений строк в кадре данных по значениям столбцов - PullRequest
0 голосов
/ 13 сентября 2018

У меня трудности с сортировкой значений строк по конкретному столбцу. Значения имеют разный порядок, например,

 METHOD  VAL1  VAL2  VAL3
    1-A     10    2     15
    10-B    11    5     15
    11-c    23    45    65
    2-F     4     65    67
    3-T     4     56    11

и мне нужно вот так,

 METHOD  VAL1  VAL2  VAL3
    1-A     10    2     15
    2-F     4     65    67
    3-T     4     56    11 
    10-B    11    5     15
    11-c    23    45    65

Порядок сортировки основан на столбце METHOD. Я пытался это устроить разными способами, но безуспешно.

Я решил эту проблему, но есть другая проблема в том же коде. Индивидуально следующий код работает, но при применении к функции - создает проблему.

a1 <-  a1[order(as.numeric(gsub("-.*", "", a1$varname))),]

Моя функция выглядит следующим образом,

t1<- doTable1(AE_subset$Disp_code,AE_subset$FY,"DisposalMethod",thresh = 0.02,testvar = AE_subset$Attendance,fun="sum")


doTable1<- function(var1,var2,varname,testvar=NULL,fun=NULL,inc=TRUE,thresh=0.02) {

  if (is.null(fun)) {
    a1<- as.data.frame.matrix(table(var1,var2))
  } else {
    a1<- as.data.frame.matrix(tapply(testvar,list(var1,var2),FUN=fun,na.rm=TRUE))
  }

  a1<- rownames_to_column(a1,var=varname)

  a1$FY3PR<- a1$FY3*proRata



  if (!is.null(fun))
    if (fun=="mean")
      a1$FY3PR<- a1$FY3


  a1 <-  a1[order(as.numeric(gsub("-.*", "", a1$varname))),]  # dataframe is not updating here

  a1 <- a1 %>% replace(., is.na(.), 0)
  a1 <- rbind(a1,c("Total",as.numeric(colSums(a1[,2:4]))))


  return(a1)

}

Simple возвращает фрейм NULL. Кто-нибудь может определить, почему эта функция не работает, когда дело доходит до команды order ()?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

С dplyr вы можете сделать:

library(dplyr)
dat %>% # we create a new column based on METHOD
  mutate(met_num =as.numeric(gsub("\\D", "", METHOD)) ) %>% # gets only the number part 
  arrange(met_num) %>%  # we arrange just by the number part of METHOD
  select(-met_num) # removes that new column

  METHOD VAL1 VAL2 VAL3
1    1-A   10    2   15
2    2-F    4   65   67
3    3-T    4   56   11
4   10-B   11    5   15
5   11-c   23   45   65

Используемые данные:

tt <- "METHOD  VAL1  VAL2  VAL3
    1-A     10    2     15
10-B    11    5     15
11-c    23    45    65
2-F     4     65    67
3-T     4     56    11"

dat <- read.table(text = tt, header = T)
0 голосов
/ 13 сентября 2018

Вы можете использовать gsub, чтобы отделить числа от символов и order их:

df[order(as.numeric(gsub("-.*", "", df$METHOD))),]

  METHOD VAL1 VAL2 VAL3
1    1-A   10    2   15
4    2-F    4   65   67
5    3-T    4   56   11
2   10-B   11    5   15
3   11-c   23   45   65
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...