2015-05-30 17 views
5

W poniższym dataframe Chcę utworzyć nową zmienną jako następującą funkcją wszystkich istniejących:dplyr: Tworzenie nowej zmiennej w funkcji wszystkich istniejących zmiennych bez określenia ich nazwy

as.numeric(paste0(df[i,],collapse="")) 

Jednak ja nie chcemy jawnie definiować nazw kolumn, ponieważ ich liczba i nazwy mogą być za każdym razem inne. Jak mogę to zrobić za pomocą dplyr?

Równowartość w zasady R byłoby coś takiego:

apply(df,1,function(x) as.numeric(paste0(x,collapse=""))) 


df <- structure(list(X1 = c(50, 2, 2, 50, 5, 5, 2, 50, 5, 5, 50, 2, 
5, 5, 50, 2, 2, 50, 9, 9, 9, 9, 9, 9), X2 = c(2, 50, 5, 5, 50, 
2, 5, 5, 50, 2, 2, 50, 9, 9, 9, 9, 9, 9, 50, 2, 2, 50, 5, 5), 
    X3 = c(5, 5, 50, 2, 2, 50, 9, 9, 9, 9, 9, 9, 50, 2, 2, 50, 
    5, 5, 2, 50, 5, 5, 50, 2), X4 = c(9, 9, 9, 9, 9, 9, 50, 2, 
    2, 50, 5, 5, 2, 50, 5, 5, 50, 2, 5, 5, 50, 2, 2, 50)), class = "data.frame", .Names = c("X1", 
"X2", "X3", "X4"), row.names = c(NA, -24L)) 
+0

Czy 'df%>% mutate (newcol = as.numeric (do.call (paste0, df)))' czego szukasz? W każdym razie odpowiednik w 'base' R nie jest tym, co wskazałeś, ale' as.numeric (do.call (paste0, df)) '(znacznie bardziej efektywny). – nicola

+1

Tak, dziękuję! Możesz użyć . zamiast df wewnątrz wklej: df%>% mutate (newcol = do.call (paste0,)). Przyjmę to jako odpowiedź. – Brani

Odpowiedz

3

Można spróbować:

df %>% mutate(newcol=as.numeric(do.call(paste0,df))) 

lub (jak zasugerował, może więcej dplyr style):

df %>% mutate(newcol=as.numeric(do.call(paste0,.))) 
Powiązane problemy