2017-11-17 1 views
-1

Ich habe eine saubere Datenrahmen, mit einem Begriff und Thema pro Zeile. Es sieht wie folgt aus:Machen Sie einzelne Spalte in mehrere Spalten basierend auf einer anderen Spalte

num_topic, term 
1, blue 
1, green 
2, dog 
2, cat 

Ich mag würde jedes Thema in einer separaten Spalte ordnen, für die menschliche Lesbarkeit

topic1, topic2 
blue, dog 
green, cat 

Das scheint ziemlich intuitiv, aber ich kann nicht herausfinden, wie es zu tun. Es ist nicht dasselbe wie die verknüpfte Frage, da für jeden Begriff keine eindeutigen Bezeichner vorhanden sind. Es gibt nur Listen mit Begriffen für jedes Thema.

+0

Das nennt man einen Drehpunkt – Keith

+0

Danke, das ist sehr nah! Aber das Problem ist, ich möchte nur Spalten von Themen. Es gibt wirklich keinen eindeutigen Bezeichner für jeden Begriff im Thema. –

+0

@Adam_G Können Sie dann eine temporäre Kennung hinzufügen? z.B. etwas wie 'df%>% group_by (num_topic)%>% muate (id = seq (1, n()))%>% ungroup()%>% verbreite (num_topic, term)%>% select (-id) ' –

Antwort

2

Wie wäre es mit dem Folgenden. Beachten Sie, dass davon ausgegangen wird, dass Einträge pro num_topic Gruppe "in Ordnung" sind, d. H. blue gehört zu dog, gehört zu cat, und so weiter.

df <- read.csv(text = 
    "num_topic,term 
    1,blue 
    1,green 
    2,dog 
    2,cat"); 

df <- as.data.frame(sapply(split(df, df$num_topic), function(x) x$term)); 
df; 
#  1 2 
#1 blue dog 
#2 green cat 

Erläuterung: Split auf num_topic und binden Spalten term zusammen.

+2

Oder benutze' entstapeln (df, term ~ num_topic) ' – akrun

+1

@akrun Du gewinnst ;-) auf jeden Fall die kürzeste Lösung! –

Verwandte Themen