2017-06-25 48 views
1

如何確定每個行的最大值(例如:b1和a4的20),它比下一個最大值(b1的5倍)高2倍a3)同一排?如何確定比下一個最大值高2倍的最大值

樣品輸入

name a1 a2 a3 a4 
b1 1 1 5 20 
b2 10 9 20 9 
b3 1 1 1 1 

樣本輸出

b1 a4 20 
b2 a3 20 
+0

你嘗試過什麼碼? – Nate

+0

什麼?這個問題沒有意義。什麼最大值?行?柱?哪個是「下一個最大值?你是否把整個東西當作矩陣? –

回答

1

隨着:

library(dplyr) 
library(tidyr) 
d %>% 
    gather(k, v, -name) %>% 
    arrange(-v, name) %>% 
    group_by(name) %>% 
    mutate(logi = v/lead(v, default = min(v)) >= 2) %>% 
    filter(v == first(v) & logi) %>% 
    select(-logi) 

結果是:

# A tibble: 2 x 3 
# Groups: name [2] 
    name  k  v 
    <fctr> <chr> <int> 
1  b1 a4 20 
2  b2 a3 20 

數據使用:

d <- structure(list(name = structure(1:3, .Label = c("b1", "b2", "b3"), class = "factor"), 
        a1 = c(1L, 10L, 1L), 
        a2 = c(1L, 9L, 1L), 
        a3 = c(5L, 20L, 1L), 
        a4 = c(20L, 9L, 1L)), 
       .Names = c("name", "a1", "a2", "a3", "a4"), class = "data.frame", row.names = c(NA, -3L)) 
+1

感謝你的代碼。我遇到了一個錯誤,當我在一個tibble上運行它時,它說」找不到名字「 – user1883491

+0

要添加更多這個代碼的輸入是在我轉置了一個tibble後出現的,似乎這些值被轉換爲'char',但仍然不知道如何避免這個問題,我正在使用這個函數來轉置c < - as_tibble(cbind (nms = names(b),t(b)))。第一行和第一列是字符,其餘的都是'int',但在轉置後,似乎一切都是'char'。 – user1883491

+0

@ user1883491你能否更新你的問題我可以重現你的問題嗎? – h3rm4n