2016-05-02 51 views
-2

我試圖在R中編寫一個腳本,我將其中的值的總和取代爲來自另一列的條件。 說我有兩列,表中的fakeVector & fakeVector1「總」在R中,我有兩列,並希望在條件滿足時取總和

fakeVector = c('NTC.H3','NTC.F2','NTC.F22','abc123','sample1') 
fakeVector1 = c('1','2','3','4','5') 
total=rbind(fakeVector, fakeVector1) 

我想要得到的值fakeVector1其中fakeVector =特定值。 例如,我想抓住fakeVector1值,其中fakeVector =具體值,例如「NTC.H3」 我該怎麼做?

+0

嘗試'總和(as.numeric(fakeVector1 [fakeVector == 「NTC.H3」))'注意'fakeVector1'是'由於未知原因,character'類(假設你想要的'總和') – akrun

+0

您有兩種選擇:(1)首先篩選您的數據框以僅包含與條件匹配的行,然後將列加總爲一列或(2)反過來。快速它不會有很大的區別,所以選擇一個產生更乾淨的代碼。 –

+0

'total'此刻是一個矩陣,而不是data.frame。我認爲你在駕駛的是總數< - data.frame(fakeVector = c('NTC.H3','NTC.F2','NTC.F22','abc123','sample1'),fakeVector1 = 1:5)'。然後你可以調用'aggregate(total $ fakeVector1,list(total $ fakeVector),sum)'(或者'dplyr'或'data.table'等價物)。 – alistaire

回答

3

我們可以嘗試

sum(as.numeric(total["fakeVector1",][total["fakeVector",]=="NTC.H3"])) 
+0

再次...像一個忍者:) – Sotos

+0

@Sotos對不起,我不知道你也試圖這 – akrun

+1

這很好。只要你繼續發帖,我一直在學習! – Sotos

1
total[2,][which(total[1,] == "NTC.H3")] 
#[1] "1" 

v1 <- c('NTC.H3', 'NTC.F22', 'abc123') 
sum(as.numeric(total[2,][which(total[1,] %in% v1)])) 
#[1] 8 
1

如果您的數據集組織爲data.frame,如果你想知道一個列的每一個條件的另一列的總和,你可以使用快速data.table包。

# load library 
    library(data.table) 

# get your data 
    fakeVector = c('NTC.H3','NTC.F2','NTC.F22','abc123','sample1') 
    fakeVector1 = c('1','2','3','4','5') 
    total=cbind(fakeVector, fakeVector1) 

    total <- as.data.table(total) 
    total$fakeVector1 <- as.numeric(total$fakeVector1) 

# Solution 
    total[, .(mysum = sum(fakeVector1)), by=.(fakeVector)]