Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Довольно просто с duplicated
df[duplicated(df$group),]
group score 2 1 10 3 1 22 5 2 6 7 3 20 9 4 2 10 4 60 12 5 5
dplyr::filter(df, group == lag(group))
group score
1 1 10
2 1 22
3 2 6
4 3 20
5 4 2
6 4 60
7 5 5
Дополнительную информацию см. в lead
и lag
пакета dplyr
:
Другой параметр base R
будет проверять смежные элементы
df[c(FALSE,df$group[-1]==df$group[-nrow(df)]),]
# group score
#2 1 10
#3 1 22
#5 2 6
#7 3 20
#9 4 2
#10 4 60
#12 5 5
Здесь я удалил первое наблюдение в «группе» (df$group[-1]
) и сравнил (==
) с вектором в котором последнее наблюдение удаляется (df$group[-nrow(df)])
). Поскольку length
сравнения меньше, чем nrow
набора данных, мы нажимаем FALSE
вверху и используем его как логический индекс для подмножества набора данных.
Опция с dplyr
заключается в выборе строк, игнорирующих 1-ю строку
library(dplyr)
df %>%
group_by(group) %>%
slice(2:n())
# group score
# <dbl> <dbl>
#1 1.00 10.0
#2 1.00 22.0
#3 2.00 6.00
#4 3.00 20.0
#5 4.00 2.00
#6 4.00 60.0
#7 5.00 5.00
. Другой способ показан @Rich Scriven в теперь удаленном ответе
df %>%
group_by(group) %>%
slice(-1)