我有一個如下所示的資料框:
Place Time1 Time2 Time3 Time4 Time5 Time6 Time7 Time8 Time9 ...
CA 0.2 0.3 0.1 0.4
MN 0.01 0.19 0.1 0.2 0.1 0.1 0.1 0.1 0.1
NY 0.15 0.05 0.2 0.1 0.1 0.2 0.2
還有更多時間列。對于每一行,時間列的值總和為 1。我想將每一行的時間值從大到小排列,并獲得這些時間點的總和首次通過 0.25 的時間點。例如,下面是一個示例輸出(NY 有三個值,因為它們都沒有通過 0.25,但它們是并列的):
CA Time 4
MN Time 4 Time 2
NY Time 3 Time 6 Time 7
uj5u.com熱心網友回復:
您可能會得到長格式的資料,arrange行由Place和 遞減value。對于每個Place選擇總和為 0.25 的最高值。在平局的情況下,這將選擇所有相似的值。
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = -Place,
values_drop_na = TRUE) %>%
arrange(Place, desc(value)) %>%
group_by(Place) %>%
summarise(result = toString(name[value %in%
value[seq_len(match(TRUE, cumsum(value) > 0.25))]]))
# Place result
# <chr> <chr>
#1 CA Time4
#2 MN Time4, Time2
#3 NY Time3, Time6, Time7
資料
如果您以可重現的格式提供資料,則更容易提供幫助
df <- structure(list(Place = c("CA", "MN", "NY"), Time1 = c(0.2, 0.01,
0.15), Time2 = c(0.3, 0.19, 0.05), Time3 = c(0.1, 0.1, 0.2),
Time4 = c(0.4, 0.2, 0.1), Time5 = c(NA, 0.1, 0.1), Time6 = c(NA,
0.1, 0.2), Time7 = c(NA, 0.1, 0.2), Time8 = c(NA, 0.1, NA
), Time9 = c(NA, 0.1, NA)), class = "data.frame", row.names = c(NA, -3L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/474498.html
下一篇:獲取資料框中特定列每小時的平均值
