Как получить максимальное значение таблицы в строке на R [дубликат]

Как видно из вышеприведенных сообщений, список не может быть дифференцирован между List & lt; Object & gt; и List & lt; String & gt; или List & lt; Integer & gt; .

Я решил это сообщение об ошибке для аналогичной проблемы:

  List & lt; String & gt;  strList = (List & lt; String & gt;) someFunction ();  Строка s = strList.get (0);   

со следующим:

  List & lt;? & gt;  strList = (List & lt;? & gt;) someFunction ();  String s = (String) strList.get (0);   

Объяснение: Преобразование первого типа проверяет, что объект является списком, не заботясь о типах, находящихся внутри (поскольку мы не можем проверить внутренние типы на уровне списка). Второе преобразование теперь требуется, потому что компилятор знает, что List содержит какие-то объекты. Это проверяет тип каждого объекта в Списке по мере его доступа.

21
задан Henrik 30 June 2014 в 20:32
поделиться

4 ответа

Вот одна возможность:

df$colMax <- apply(df, 1, function(x) max(x[x != 9]))
17
ответ дан docendo discimus 17 August 2018 в 08:53
поделиться
  • 1
    Ну, это создает дополнительные копии. Вы можете обернуть другие ответы в функции, чтобы скрыть, что создается копия. – Roland 30 June 2014 в 20:19
  • 2
    – docendo discimus 30 June 2014 в 20:21

Функция pmax была бы полезной здесь. Единственный улов состоит в том, что в качестве параметров требуется куча векторов. Вы можете преобразовать data.frame в параметры с помощью do.call. Я также установил 9 значений в NA, как это было предложено другими, но сделайте это, используя несколько нетрадиционную команду is.na<-.

do.call(pmax, c(`is.na<-`(df, df==9), na.rm=T))
# [1] 5 6 7
10
ответ дан MrFlick 17 August 2018 в 08:53
поделиться

Замените 9 на NA, а затем используйте pmax, как было предложено @MrFlick в его удаленном ответе:

df2 <- df #copy df because we are going to change it
df2[df2==9] <- NA
do.call(function(...) pmax(..., na.rm=TRUE), df2)
#[1] 5 6 7
3
ответ дан Roland 17 August 2018 в 08:53
поделиться
  • 1
    # или do.call (pmax, c (df2, na.rm = TRUE)) # [1] 5 6 7 – akrun 30 June 2014 в 20:26
  • 2
    Почему мы должны отдавать предпочтение pmax max? – russellpierce 2 July 2014 в 13:33
  • 3
    @rpierce Я этого не говорил, не так ли? Эти функции выполняют разные вещи. – Roland 10 July 2014 в 11:47
  • 4
    Вы этого не сделали. Они оба оба, похоже, используются для этой же цели здесь, и я не математик, который может интерпретировать файл справки, чтобы сказать разницу, и я не обученный программист, который может понять, какая функция более эффективна. Таким образом, я спросил. – russellpierce 10 July 2014 в 12:01
  • 5
    do.call(pmax, DF) дает тот же результат, что и apply(DF, 1, max) (при условии, что DF - это data.frame со всеми числовыми столбцами), но быстрее в 100 раз на data.frame с 2 столбцами и 1e4 строками. Если вы не понимаете документацию, посмотрите на раздел примеров и поиграйте с функцией. – Roland 10 July 2014 в 12:10
#make a copy of your data.frame
tmp.df <- df
#replace the 9s with NA
tmp.df[tmp.df==9] <- NA
#Use apply to process the data one row at a time through the max function, removing NA values first
apply(tmp.df,1,max,na.rm=TRUE)
1
ответ дан russellpierce 17 August 2018 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: