Это чистое решение для JavaScript без каких-либо библиотек или плагинов:
document.addEventListener('click', function (e) {
if (hasClass(e.target, 'bu')) {
// .bu clicked
// Do your thing
} else if (hasClass(e.target, 'test')) {
// .test clicked
// Do your other thing
}
}, false);
, где hasClass
-
function hasClass(elem, className) {
return elem.className.split(' ').indexOf(className) > -1;
}
Кредит относится к Dave и Sime Vidas
Использование более современных JS, hasClass
может быть реализовано как:
function hasClass(elem, className) {
return elem.classList.contains(className);
}
Более короткое решение с использованием data.table
:
setDT(group)[, .SD[which.max(pt)], by=Subject]
# Subject pt Event
# 1: 1 5 2
# 2: 2 17 2
# 3: 3 5 2
Другой вариант - slice
library(dplyr)
group %>%
group_by(Subject) %>%
slice(which.max(pt))
# Subject pt Event
# <dbl> <dbl> <dbl>
#1 1 5 2
#2 2 17 2
#3 3 5 2
do.call(rbind, lapply(split(group,as.factor(group$Subject)), function(x) {return(x[which.max(x$pt),])}))
Использование Base R
Я не был уверен, что вы хотите сделать в столбце «Событие», но если вы хотите сохранить это, как насчет
isIDmax <- with(dd, ave(Value, ID, FUN=function(x) seq_along(x)==which.max(x)))==1
group[isIDmax, ]
# ID Value Event
# 3 1 5 2
# 7 2 17 2
# 9 3 5 2
Здесь мы используем ave
, чтобы посмотреть на Столбец «Значение» для каждого «ИД». Затем мы определяем, какое значение является максимальным, а затем превращаем его в логический вектор, который мы можем использовать для подмножества исходного кадра данных.
with
, потому что немного странно иметь данные как внутри, так и снаружи group
data.frame. Если вы прочитали данные с помощью read.table
или чего-то еще, вам нужно будет использовать with
, потому что эти имена столбцов не будут доступны за пределами data.frame.
– MrFlick
4 July 2014 в 16:56
Если вы хотите получить наибольшее значение pt для объекта, вы можете просто использовать:
pt_max = as.data.frame(aggregate(pt~Subject, group, max))
Решение dplyr
:
> library(dplyr)
> ID <- c(1,1,1,2,2,2,2,3,3)
> Value <- c(2,3,5,2,5,8,17,3,5)
> Event <- c(1,1,2,1,2,1,2,2,2)
> group <- data.frame(Subject=ID, pt=Value, Event=Event)
> group <- group_by(group, Subject)
> summarize(group, max.pt = max(pt))
Это дает следующий фрейм данных:
Subject max.pt
1 1 5
2 2 17
3 3 5
Event
в подмножестве, в этом случае вы могли бы сделать: df %>% group_by(Subject) %>% filter(pt == max(pt))
(включая ссылки, если они есть)
– docendo discimus
3 July 2014 в 19:11
Наиболее интуитивным методом является использование функции group_by и top_n в dplyr
group %>% group_by(Subject) %>% top_n(1, pt)
. Вы получите
Source: local data frame [3 x 3]
Groups: Subject [3]
Subject pt Event
(dbl) (dbl) (dbl)
1 1 5 2
2 2 17 2
3 3 5 2
.I
в data.table? – HappyCoding 27 June 2017 в 03:26