Замена строк строки на основе условия в значениях столбцов - PullRequest
0 голосов
/ 22 марта 2019

У меня есть несколько наборов данных в следующем формате

head(averagetable)
   Group.1     Moving   Feeding  Standing
1 cluster1 0.05632530 0.1722892 0.7503012
2 cluster2 0.09220779 0.2644481 0.6118506
3 cluster3 0.04863636 0.1268182 0.7993182

Я довольно новичок в R, но мое задание простое:

1) Я хотел бы заменить имя cluster# в Group.1 на Standing в строке с самым высоким значением в столбце Standing.

2) Имя Moving/Feeding для второго по величине значения столбца Standing

3) Имя Feeding/Moving к третьему по величине значению столбца Standing.

Отсюда вывод:

print(averagetable)
   Group.1       Moving     Feeding   Standing
1 Moving/Feeding 0.05632530 0.1722892 0.7503012
2 Feeding/Moving 0.09220779 0.2644481 0.6118506
3 Standing       0.04863636 0.1268182 0.7993182

Надеюсь, это было достаточно ясно. Обратите внимание, что замена строк с использованием order() не подходит для моих нужд, так как у меня несколько фреймов данных, и значения могут отличаться. Я предполагаю, что ifelse() - это функция, которую нужно использовать, но я предполагаю, что for -петл должен быть реализован, и я не уверен, как это сделать.

1 Ответ

1 голос
/ 22 марта 2019

Вы можете просто order Standing и заменить Group.1 значения

averagetables$Group.1[order(averagetables$Standing)] <- 
                      c("Feeding/Moving", "Moving/Feeding", "Standing")

averagetables
#         Group.1     Moving   Feeding  Standing
#1 Moving/Feeding 0.05632530 0.1722892 0.7503012
#2 Feeding/Moving 0.09220779 0.2644481 0.6118506
#3       Standing 0.04863636 0.1268182 0.7993182

Если строк много и вы хотите изменить значения Group.1 только в верхних 3 значениях Standing, мы можем использовать tail для подмножества

inds <- tail(order(averagetables$Standing), 3)
averagetables$Group.1[inds] <- c("Feeding/Moving", "Moving/Feeding", "Standing")

Это изменит значения только в Group.1 для 1-го самого высокого, 2-го самого высокого и 3-го самого высоких значений Standing.

данные

averagetables <- structure(list(Group.1 = c("cluster1", "cluster2", 
"cluster3"
), Moving = c(0.0563253, 0.09220779, 0.04863636), Feeding = 
c(0.1722892, 
0.2644481, 0.1268182), Standing = c(0.7503012, 0.6118506, 0.7993182
)), row.names = c("1", "2", "3"), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...