2015-09-30 42 views
1

我有一個矩陣,我試圖在行末加上一行,然後除以該行總和行,有條件的行之和大於100,這是我到目前爲止有:我如何按行矩陣和滿足特定條件(行和> 100)的行按行劃分行?r

row.sums <- rowSums(a) 
a <- cbind(a, row.sums) 

這給了我我想要的初始矩陣,並在最後一列與行Sums。下面的代碼是什麼,我試圖第二步:

a[(a[,dim(a)]>100)] <- dtm/row.sums 

這給了我一個錯誤說,我想更換不匹配我要替換它的矢量向量的大小。我在這裏做錯了什麼?對不起,如果這是一個非常基本的問題,我一般對R /編碼來說很新。

+0

你得到的錯誤,因爲'row.sums'包含所有行的資金,但是你想把這些僅分配給矩陣的一個較小的子集。因此,在創建'row.sums'時過濾以及 –

回答

0

這可能有點冗長的解決方案,但它的工作原理。

df <- cbind(df, rowSums(df)) 
a <- df[, dim(df)[2]] 

for(i in 1:length(a)) 
{ 
    if(a[i] > 100) 
    { 
    df[i, ] <- df[i, ]/a 
    } 
} 


#> df 
#  [,1] [,2]  [,3] [,4]  [,5] [,6]  [,7] 
# x 0.03333333 0.050 0.1000000 0.100 0.1666667 0.375 1.000000 
# y 0.06666667 0.075 0.1333333 0.125 0.2000000 0.500 1.333333 

數據

x <- c(100,200,300,400,500) 
y <- c(200,300,400, 500, 600) 
df <- rbind(x, y) 
+0

謝謝!因爲它有點短,我第一個答案就去了,但是這也起作用了! –

+0

好!如果第一個答案適合您,請考慮接受該解決方案。 –