Как выбрать максимум один столбец, а не NA в другом столбце в R? - PullRequest
0 голосов
/ 06 декабря 2018

Я ищу способ в R, где я могу выбрать max (col1), где col2 не является NA?

Пример datafame с именем df1

#df1
Year  col1  col2 
2016   4     NA  # has NA
2016   2     NA  # has NA
2016   1     3  # this is the max for 2016
2017   3     NA
2017   2     3   # this is the max for 2017
2017   1     3
2018   2     4   # this is the max for 2018
2018   1     NA

Я бы хотелновый набор данных только для возврата

Year  col1  col2 
2016   1     3
2017   2     3
2018   2     4

Если кто-нибудь может помочь, это будет очень ценно?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

В base R

out <- na.omit(df1)
merge(aggregate(col1 ~ Year, out, max), out) # thanks to Rui
#  Year col1 col2
#1 2016    1    3
#2 2017    2    3
#3 2018    2    4
0 голосов
/ 06 декабря 2018

Использование dplyr:

library(dplyr)
df1 %>% filter(!is.na(col2)) %>%
  group_by(year) %>%
  arrange(desc(col1)) %>%
  slice(1)

Использование data.table:

library(data.table)
setDT(df1)
df1[!is.na(col2), .SD[which.max(col1)], by = Year]

Это работает в новом сеансе R:

library(data.table)
dt = fread("Year  col1  col2 
2016   4     NA
2016   2     NA
2016   1     3
2017   3     NA
2017   2     3
2017   1     3
2018   2     4
2018   1     NA")

dt[!is.na(col2), .SD[which.max(col1)], by = Year]
#    Year col1 col2
# 1: 2016    1    3
# 2: 2017    2    3
# 3: 2018    2    4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...