2016-03-19 38 views
8

Yapmak istediğim, bir data.frame sütununun 1'deki tüm değerleri bir vektördeki ilk öğe ile çarpmak, ardından 2. öğe tarafından 2. sütundaki tüm değerleri çarpmaktır. vektör içinde, vb ...Vektör çerçevesindeki bir veri çerçevesindeki çarpı sütunlar

c1 <- c(1,2,3) 
c2 <- c(4,5,6) 
c3 <- c(7,8,9) 
d1 <- data.frame(c1,c2,c3) 

    c1 c2 c3 
1 1 4 7 
2 2 5 8 
3 3 6 9 

v1 <- c(1,2,3) 

Yani sonuç şudur: Ben 100 sütun varsa

c1 c2 c3 
1 1 8 21 
2 2 10 24 
3 3 12 27 

Ben bu bir anda sütun ama ne yapabilirim? Bunu programlı olarak yapabilmek istiyorum.

+0

elemanlarını çoğalmaya kullanımı tüm dataframe mi sayısal? – gung

+0

Çalıştığım sorunun tüm veri çerçevesi değil. Bir faktör sütunu var. –

+2

Örneğinizde bunu hesaba katmak için örneğinize eklemelisiniz. – gung

cevap

5

Veri çerçevesinin aktarımı işler.

c1 <- c(1,2,3) 
c2 <- c(4,5,6) 
c3 <- c(7,8,9) 
d1 <- data.frame(c1,c2,c3) 
v1 <- c(1,2,3) 
t(t(d1)*v1) 
#  c1 c2 c3 
#[1,] 1 8 21 
#[2,] 2 10 24 
#[3,] 3 12 27 

DÜZENLEME: bütün sütunlar sayısal değilse, aşağıdaki

c1 <- c(1,2,3) 
c2 <- c(4,5,6) 
c3 <- c(7,8,9) 
d1 <- data.frame(c1,c2,c3) 

# Adding a column of characters for demonstration 
d1$c4 <- c("rr", "t", "s") 

v1 <- c(1,2,3) 

#Choosing only numeric columns 
index <- which(sapply(d1, is.numeric) == TRUE) 
d1_mat <- as.matrix(d1[,index]) 

d1[,index] <- t(t(d1_mat)*v1) 
d1 
# c1 c2 c3 c4 
#1 1 8 21 rr 
#2 2 10 24 t 
#3 3 12 27 s 
+0

Faktör değişkeni hesaba katmanız gerekir. – gung

+0

Bu, 10 sütun satır 1068 satır veri çerçeve üzerinde çalışır. Teşekkürler! –

4

yapabilirsiniz Veya her satır girişi v1 karşılık gelen eleman ile çarpılır, böylece basitçe, vektör köşegenleştirebiliriz:

c1 <- c(1,2,3) 
c2 <- c(4,5,6) 
c3 <- c(7,8,9) 
d1 <- as.matrix(cbind(c1,c2,c3)) 
v1 <- c(1,2,3) 

d1%*%diag(v1) 

    [,1] [,2] [,3] 
[1,] 1 8 21 
[2,] 2 10 24 
[3,] 3 12 27 
Ayrıca uzunlukları eşit yapmak ve vektör çoğaltabilirsiniz
1

da çoğalıp

d1*v1[col(d1)] 
# c1 c2 c3 
#1 1 8 21 
#2 2 10 24 
#3 3 12 27 

ya


ya mapply ile sweep

sweep(d1, 2, v1, FUN="*") 
ilgili 'data.frame' sütun ve 'vektör'

mapply(`*`, d1, v1) 
İlgili konular