2013-06-04 14 views
9

Ho un frame di dati in forma di colonne - ingressoConvertire frasi di parole in R

Id Comment 
xc545 Ronald is a great person 
g6548 Hero worship is bad 

ho bisogno l'output sotto forma di Risultato

Id Words 
xc545 Ronald 
xc545 is 
xc545 a 
xc545 great 
xc545 person 
g6548 Hero 
g6548 worship 
g6548 is 
g6548 bad 

bisogno di una dichiarazione R per eseguire questo.

seguito è quello che ho provato -

result<-lapply(input,function(x)strsplit(x[2]," ")) 

Tuttavia, questo restituisce solo record.

+1

Posso chiedere perché si desidera che questa? Questo potrebbe determinare se un dataframe è la migliore struttura per i tuoi dati. –

+0

Volevo cercare attraverso la frase per i nomi dei prodotti e taggarli. Ho i nomi prodotto (200.000) in un'altra colonna della tabella. Il confronto SQL richiede molto tempo. – user1882633

risposta

8

Supponiamo DF è la vostra data.frame, una possibilità potrebbe essere:

> List <- strsplit(DF$Comment, " ") 
> data.frame(Id=rep(DF$Id, sapply(List, length)), Words=unlist(List)) 
    Id Words 
1 xc545 Ronald 
2 xc545  is 
3 xc545  a 
4 xc545 great 
5 xc545 person 
6 g6548 Hero 
7 g6548 worship 
8 g6548  is 
9 g6548  bad 

Nota che la mia risposta è valido solo quando v'è un semplice spazio tra ogni coppia di parole.

+1

Grazie mille - Questo aiuta davvero! – user1882633

3

Una soluzione data.table ispirato da una this:

library(data.table) 
dt = data.table(df) 
dt[,c(Words=strsplit(Comment, " ", fixed = TRUE)), by = Id] 
Id  V1 
1: xc545 Ronald 
2: xc545  is 
3: xc545  a 
4: xc545 great 
5: xc545 person 
6: g6548 Hero 
7: g6548 worship 
8: g6548  is 
9: g6548  bad 
3

Utilizzando scan, tapply e stack:

d <- read.table(text='Id Comment 
xc545 "Ronald is a great person" 
g6548 "Hero worship is bad"', header=TRUE, as.is=TRUE) 

stack(tapply(d$Comment, d$Id, function(x) scan(text=x, what=''))) 
# values ind 
# 1 Hero g6548 
# 2 worship g6548 
# 3  is g6548 
# 4  bad g6548 
# 5 Ronald xc545 
# 6  is xc545 
# 7  a xc545 
# 8 great xc545 
# 9 person xc545 
Problemi correlati