2012-11-15 12 views
8

Chciałbym nauczyć się, jak stosować funkcje w konkretnych kolumnach mojej ramce danych bez "wykluczania" innych kolumn z mojego df. Na przykład chciałbym pomnożyć niektóre konkretne kolumny przez 1000 i pozostawić pozostałe tak, jak są.R: Zastosuj funkcję do konkretnych kolumn zachowując pozostałą ramkę danych

Używanie sapply funkcję na przykład tak:

a<-as.data.frame(sapply(table.xy[,1], function(x){x*1000})) 

uzyskać nowe dataframes z pierwszej kolumnie pomnożona przez 1000, ale bez innych kolumn, które nie wykorzystują w pracy. Tak więc moja próba była taka:

a<-as.data.frame(sapply(table.xy, function(x) if (colnames=="columnA") {x/1000} else {x})) 

ale ta nie zadziałała.

Moim obejściem było nadanie obu ramom danych kolejnego wiersza z identyfikatorami, a następnie scalenie starej ramki danych z nowo utworzoną, aby uzyskać kompletną. Ale myślę, że musi być lepsze rozwiązanie. Czyż nie?

Odpowiedz

6

Jeśli chcesz tylko zrobić obliczeń na jednym lub kilku kolumn można użyć transform lub po prostu mają indeks to ręcznie:

# with transfrom: 
df <- data.frame(A = 1:10, B = 1:10) 
df <- transform(df, A = A*1000) 

# Manually: 
df <- data.frame(A = 1:10, B = 1:10) 
df$A <- df$A * 1000 
+0

tak. tego właśnie szukałem. Dzięki!! – Joschi

+0

jak to zrobić, jeśli mam dużo kolumn (n = 30)? wpisanie wszystkich nazw byłoby zbyt wielkim zadaniem ... – Joschi

+2

Masz numery? 'df [, c (1,2, ....)] <- 1000 * df [, c (1,2, ....)]' –

0

Poniższy kod będzie zastosować odpowiednią funkcję do tylko kolumn sprecyzować. Utworzę prostą ramkę danych jako odtwarzalny przykład.

(df <- data.frame(x = 1, y = 1:10, z=11:20)) 
(df <- cbind(df[1], apply(df[2:3],2, function(x){x*1000}))) 

Zasadniczo użyć cbind() aby wybrać kolumny, które nie mają funkcji do uruchomienia na, a następnie użyć apply() z pożądanych funkcji na kolumnach docelowych.

Powiązane problemy