2017-04-05 82 views
1

應用規則到數據幀獲得第一優先我有包括不同層次的選擇,數據幀:如何通過R中

df = read.table(text="Index V1 V2 V3 V4 V5 
    1 A A A B A 
    2 B B B B B 
    3 B C C B B 
    4 B B C D E 
    5 B B C C D 
    6 A B B B B 
    7 C C B D D 
    8 A B C D E", header=T, stringsAsFactors=F) 

我想創造另一列來保存最廣爲接受的選擇。每一行。如果有多個選項,請採取最大出現次數。如果最大數量大於1,則以出現的最大次數進行第一次選擇。所以我的結果是:

Index V1 V2 V3 V4 V5 final 
    1 A A A B A A 
    2 B B B B B B 
    3 B C C B B B 
    4 B B C D E B 
    5 B B C C D B 
    6 A B B B B B 
    7 C C B D D C 
    8 A B C D E A 

感謝您的幫助。

回答

1

我們可以通過使用table來找到每行中的值的頻率。遍歷數據集的除第一列(applyMARGIN = 1)行,得到的頻率與table,找到最大頻率(which.max)的索引,並獲得對應於最大頻率

df$final <- apply(df[-1], 1, FUN = function(x) { 
      tbl <- table(factor(x, levels = unique(x))) 
      names(tbl)[which.max(tbl)]}) 
df$final 
#[1] "A" "B" "B" "B" "B" "B" "C" "A" 
2
apply(df[,-1], 1, function(x) 
     x[which.max(ave(rep(1, length(x)), x, FUN = sum))]) 
#[1] "A" "B" "B" "B" "B" "B" "C" "A" 

df[7,2:6] = c("D", "C", "B", "C", "D") 
apply(df[,-1], 1, function(x) 
     x[which.max(ave(rep(1, length(x)), x, FUN = sum))]) 
#[1] "A" "B" "B" "B" "B" "B" "D" "A" 
names
+0

如果第7行變爲「DCBCD」,則結果爲「A」「B」「B」「B」「B」「B」「C」「A」。期望是「A」「B」「B」「B」「B」「B」「D」「A」。 – user3354212

+0

@ user3354212,它現在應該工作 –