2017-12-30 8 views
2

Beispieldaten:Binary Spalten aus Textwerte

df_stock2 <-data.frame(url= c("https://www.example.com/test","https://www.example2.com/test","https://www.example3.com/test"), stock_yes_01 = c("Google","Microsoft","Yahoo"), stock_yes_02 = c("Yahoo","Google",NA)) 

Ich versuche, den Code von here zu reproduzieren:

library(data.table) 
setDT(df_stock2) 
df_stock3 <- dcast(melt(df_stock2 , url = 'url')[value != 'NA'], 
     url ~ value, fun.aggregate = length) 

jedoch nicht wie erwartet Naht zu arbeiten.

Irgendeine Idee, warum das nicht funktioniert oder was ich ändern muss?

die Fehler, die ich erhalten:

> setDT(df_stock2) 
    Warning message: 
    In melt.data.table(df_stock2, url = "url") : 
     To be consistent with reshape2's melt, id.vars and measure.vars are internally guessed when both are 'NULL'. All non-numeric/integer/logical type columns are conisdered id.vars, which in this case are columns [url, stock_yes_01, stock_yes_02, stock_yes_03, ...]. Consider providing at least one of 'id' or 'measure' vars in future. 
df_stock3 <- dcast(melt(df_stock2, url = 'url')[value != 'NA'], 
    +  url() ~ value, fun.aggregate = length) 
    Error in url() : argument "description" is missing, with no default 
    In addition: Warning message: 
    In melt.data.table(df_stock2, url = "url") : 
     To be consistent with reshape2's melt, id.vars and measure.vars are internally guessed when both are 'NULL'. All non-numeric/integer/logical type columns are conisdered id.vars, which in this case are columns [url, stock_yes_01, stock_yes_02, stock_yes_03, ...]. Consider providing at least one of 'id' or 'measure' vars in future. 

Antwort

2

Das Problem melt Ihren Anruf ist. Sie haben das Argument id zu url umbenannt, und das funktioniert natürlich nicht. Das Argument id teilt der melt-Funktion mit, welche Variablen verwendet werden sollten, um Beobachtungen zu identifizieren. Wenn Sie es nicht angeben, versucht melt, alle nicht numerischen (oder ganzen oder logischen) Variablen als ID-Variablen zu erraten. Darum ging es in der Warnung. Der Fehler wird dann verursacht, wenn nach dem Schmelzen der Daten keine Spalte mit der Bezeichnung id vorhanden ist.

So lassen Sie das id Argument richtig benannt, und es funktioniert:

df_stock3 <- dcast(melt(df_stock2 , id = 'url')[value != 'NA'], 
       url ~ value, fun.aggregate = length) 
+1

ich eine geringfügige Verbesserung vorschlagen möchten. 'melt()' hat einen Parameter 'na.rm', der verwendet werden kann, um' NA'-Werte aus den geschmolzenen Daten zu entfernen. So kann '[value! = 'NA']' gespeichert werden durch 'df_stock3 <- dcast (schmelzen (df_stock2, id = 'url', na.rm = WAHR), url ~ value, fun.aggregate = length) ' – Uwe