2016-06-30 9 views
-3

Ich habe eine Liste von TabellenR Loop-Klasse für viele Spalten in viele Daten zu ändern Rahmen

tablas<-list(ratingsRyUyM1, dfLikedSum,dfNotLikedSum,dfLikedQ, dfNotLikedQ) 

Und ich will 2 Spalten konvertieren, die ich in einem Join-Zeichen verwenden werde. Also schrieb ich:

for (i in tablas){ 
    for (j in c('movieId', 'userId')){ 
    i[, j]<-as.character(i[, j])}} 

Ich laufe das und immer noch die Spalten als Faktoren.

Ich versuchte es auch mit einer Funktion:

foo<-function(x){for (j in c('movieId', 'userId')){ 
     x[, j]<-as.character(x[, j])} 
     return(x)} 

Und dann:

lapply(tablas, foo) 

ich:

> lapply(tablas, foo) 
[[1]] 
NULL 

[[2]] 
NULL 

[[3]] 
NULL 

[[4]] 
NULL 

[[5]] 
NULL 
+0

Ich würde vorschlagen, eine Kombination aus lapply und der dplyr Funktion muate verwenden. Definieren Sie eine Funktion, die Ihre Aufgabe mit mutate und as.character() erledigt, und verwenden Sie dann lapply. Sie wissen auch, dass einige Joins Faktoren für Charaktere erzwingen. –

+0

Bitte geben Sie ein reproduzierbares Beispiel an, wenn Sie immer noch feststecken. –

+1

'function (x) {für (j in c ('movieId', 'userId')) x [, j] <- as.zeichen (x [, j]); x} 'könnte funktionieren, dh Sie müssen' x' in 'foo' zurückgeben – rawr

Antwort

0

Das funktioniert, wenn die beiden Spalten gleich sind in jeder Datenrahmen/Tabelle, wie Sie angemerkt haben. Bitte geben Sie in Zukunft ein reproduzierbares Beispiel an.

#install.packages('dplyr') 
library(dplyr) 

lst = list(df1, df2, df3, etc.) 

func = function(x) { 
    x = mutate(x, col1_name = as.character(col1_name)) 
    x = mutate(x, col2_name = as.character(col2_name)) 
} 

output = lapply(lst, func)