2017-11-08 9 views
0

ich zum Beispiel das Innere einer Spalte in R. zu sortieren versuche ich habe dies:Innenraum einer Spalte in R Sortierung

ID  HoursAvailable 
1  a,b,c,k,d 
2  e,g,h 
3  a,b,c,h,d 

Und ich versuche, die Zahlen in der Spalte wie diese intern zu sortieren

ID  HoursAvailable 
1  a,b,c,d,k 
2  e,g,h,, 
3  a,b,c,d,h 

ich habe versucht, die separate Funktion wie folgt zu verwenden:

cdMCd<- cdMf %>% separate(HoursAvailable, c("a","b","c","d","e","f","g","h","i","j"))           

Aber ich kann es nicht richtig zu sortieren bekommen. Für dieses Beispiel würde e in ID 2 in die a-Spalte einsortiert werden, aber ich muss es in die e-Spalte einsortieren. Ich plante, alle Stunden in separate Spalten zu trennen, zu ordnen und dann wieder zu kombinieren, aber ich kann sie nicht richtig trennen. Hier

+1

Es ist viel einfacher, mit der langen Version eines solchen Datensatzes zu arbeiten. Unter [this post] (https://stackoverflow.com/questions/30243510/flatten-list-column-in-data-frame-with-id-column) finden Sie einige Tipps dazu. Es gibt Dutzende ähnlicher Posts. – lmo

Antwort

0
library(dplyr) 

dt = read.table(text=" 
ID  HoursAvailable 
1  a,b,c,k,d 
2  e,g,h 
3  a,b,c,h,d 
", header=T, stringsAsFactors=F) 

SortString = function(x) {paste0(sort(unlist(strsplit(x, split=","))),collapse = ",")} 

dt %>% 
    rowwise() %>% 
    mutate(Updated = SortString(HoursAvailable)) %>% 
    ungroup() 

# # A tibble: 3 x 3 
#  ID HoursAvailable Updated 
# <int>   <chr>  <chr> 
# 1  1  a,b,c,k,d a,b,c,d,k 
# 2  2   e,g,h  e,g,h 
# 3  3  a,b,c,h,d a,b,c,d,h 
+0

Arbeitete gut, ich dachte nicht daran, eine Funktion zu erstellen – phil230

0

ist das, was ich tun werde:

zuerst eine Funktion erstellen, die eine einzelne sortieren und dann eine Funktion erstellen, die eine solche Funktion auf einen Vektor von Strings Bibliothek (stringr) Bibliothek (plyr) anwenden können

split_and_sort <- function(x){ 
    x_split <- sort(unlist(str_split(x, ","))) 
    return(paste(x_split, collapse = ",")) 
} 

split_and_sort_column <- function(x){ 
    laply(x, split_and_sort) 
} 

df$HoursAvailable <- split_and_sort_column(df$HoursAvailable) 
Verwandte Themen