如何確定每個行的最大值(例如: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
如何確定每個行的最大值(例如: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
隨着:
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))
感謝你的代碼。我遇到了一個錯誤,當我在一個tibble上運行它時,它說」找不到名字「 – user1883491
要添加更多這個代碼的輸入是在我轉置了一個tibble後出現的,似乎這些值被轉換爲'char',但仍然不知道如何避免這個問題,我正在使用這個函數來轉置c < - as_tibble(cbind (nms = names(b),t(b)))。第一行和第一列是字符,其餘的都是'int',但在轉置後,似乎一切都是'char'。 – user1883491
@ user1883491你能否更新你的問題我可以重現你的問題嗎? – h3rm4n
你嘗試過什麼碼? – Nate
什麼?這個問題沒有意義。什麼最大值?行?柱?哪個是「下一個最大值?你是否把整個東西當作矩陣? –