2012-11-15 14 views
8

Veri çerçevemdeki belirli sütunlarda işlevleri benim df'm dışındaki diğer sütunları "hariç" bırakmadan nasıl uygulayacağımı öğrenmek istiyorum. Örneğin, bazı özel sütunları 1000 ile çarpmak ve diğerlerini olduğu gibi bırakmak istiyorum.R: Veritabanının kalan kısmını koruyan belirli sütunlarda işlevi uygulama

böyle örneğin sapply fonksiyonunu kullanarak:

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

Ben 1000 ile ancak operasyonda kullanmayan diğer sütun olmadan çarpılan birinci sütun ile yeni dataframes olsun. Bu yüzden benim denemem böyle yapmaktı:

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

ama bu işe yaramadı.

Benim geçici çözümüm, her iki veri çerçevesine kimlikleri olan başka bir satır vermek ve daha sonra yeni veri tabanı ile yeni oluşturulmuş olanı bir araya getirmek. Ama bence daha iyi bir çözüm olmalı. Öyle değil mi? Yalnızca bir veya birkaç sütunlar üzerinde bir hesaplama yapmak istiyorsanız

cevap

6

el endeksi basitçe yok transform kullanabilir veya:

# 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

evet. aradığım şey buydu. Teşekkürler!! – Joschi

+0

Çok fazla sütunum varsa bunu nasıl yapabilirim (n = 30)? tüm isimleri yazmak çok fazla iş olurdu ... – Joschi

+2

Numaralarınız var mı? df [, c (1,2, ....)] <- 1000 * df [, c (1,2, ....)] –

0

Aşağıdaki kodu yalnızca sütunlara istenen işlevi uygular sen belirtin. Tekrarlanabilir bir örnek olarak basit bir veri çerçevesi oluşturacağım.

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

Temel olarak, fonksiyon, daha sonra üzerinde çalışan hedef sütunlar üzerinde istenilen fonksiyonları ile apply() kullanmak istemediğiniz sütunları seçmek için cbind() kullanın.