Вернуть имя столбца для последнего значения <> NA в строке - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть фрейм данных, содержащий оценки состояния с оценкой 1-7 (в качестве имен столбцов) Каждое наблюдение содержит репрезентативную область (в процентах) для каждой оценки состояния (1-7). Каждая строка должна составлять до 100% для каждого наблюдения.

Я могу вернуть соответствующий рейтинг условий (1-7 из названия столбца) для наивысшего% покрытия, чтобы показать, что большая часть области - это условие x.

Вот мой код для этого:

# Create some data:
    set.seed(10)
    df <- matrix(round(rbeta(100*7,1,1),digits=1), nc=7)
    df <- round(sweep(df, 1, rowSums(df), FUN="/"),digits=1)
    colnames(df)<-c(1:7) # Change the column names to reflect condition value
    df <- as.data.frame(df)

# Now return the condition corresponding to the highest % coverage 
    df$maxPercCond <- as.numeric(colnames(df)[max.col(df,ties.method="last")])
    df[df == 0] <- NA # Need to keep this as actual data contains NA values

Мой вопрос

Мне нужно вернуть пиковое условие (pkVal) для каждой строки.

    df[c(5,70),]

     1   2   3   4   5   6   7      maxPercCond pkVal  | pkVal(REQUIRED)
  5  0.1 0.2 0.2 0.1 0.2 0.1  NA    5           0.1    | 6
  70 0.2 0.2 0.1 0.2 0.1 NA   0.1   4           0.1    | 7

В приведенном выше примере значение pkVal должно равняться 6 и 7 соответственно (в соответствии с моей записью pkVal(REQUIRED), чтобы показать, что 6 было наивысшим номинальным условием для первого ряда, а 7 - наивысшим номинальным условием для второго ряда.

Я пробовал вариацию задания maxPerCond, но меня завязали узлы! Любые предложения / помощь будут приветствоваться:

 df$pkVal <- as.numeric(colnames(df)[max.col(df[cbind( 1:nrow(df),
 max.col(!is.na(df[,1:7]),"last") )],ties.method="last")])

1 Ответ

0 голосов
/ 13 ноября 2018

Одним из вариантов может быть использование apply в режиме строки и поиск имени столбца соответствующего последнего элемента, которое не равно NA:

apply(df, 1, function(x) { tail(names(x)[!is.na(x)], n=1) })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...