Добавить новый столбец в фрейм данных на основе результатов других столбцов - PullRequest
1 голос
/ 12 марта 2019

Я очень плохо знаком с R, поэтому я надеюсь, что мой вопрос будет интересным.То, что я хочу сделать, довольно просто.Вот пример моего набора данных:

> head(belongliness)
   ACTIVITY_X ACTIVITY_Y ACTIVITY_Z   Event  cluster1    cluster2     cluster3    cluster4
1:         40         47         62 Head-up 0.1900989 0.768225365 0.0160654667 0.025610279
2:         60         74         95 Head-up 0.5392218 0.038558310 0.0064671635 0.415752686
3:         62         63         88 Head-up 0.7953673 0.044981152 0.0067121719 0.152939414
4:         60         56         82 Head-up 0.9941016 0.002608879 0.0003007537 0.002988748
5:         66         61         90 Head-up 0.7027407 0.048318016 0.0079239680 0.241017291
6:         60         53         80 Head-up 0.9541378 0.023338896 0.0024442116 0.020079071

Я хотел бы создать новый столбец "winning cluster" справа от столбца "cluster 4".Столбец "winning cluster" примет самое высокое значение среди столбцов "cluster 1" - "cluster 4" для каждой строки и отобразит индексное имя этого столбца.

Для строки 1 это будет cluster 2, для строки 2 cluster 1, для строки 3 cluster 1 и т. Д.

Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 12 марта 2019

Если набор данных является классом data.table, укажите интересующие столбцы в .SDcols, получите индекс столбца с наибольшим значением в каждой строке с помощью max.col, используйте его, чтобы выбрать имя столбца и назначить (:=) as 'victory_cluster'

library(data.table)
belongliness[, winning_cluster := names(.SD)[max.col(.SD)], 
           .SDcols = cluster1:cluster4]
1 голос
/ 12 марта 2019

В базовом R это легко сделать:

belongliness$`winning cluster` = apply(belongliness[,5:8], 1, max)

, где belongliness[,5:8] соответствует столбцам cluster1 - cluster4.

или , еслиВы хотели индекс,

belongliness$`winning cluster` = apply(belongliness[,5:8], 1, which.max)
belongliness$`winning cluster` = paste0('cluster', belongliness$`winning cluster`)

Редактировать: правая часть первой строки по существу max.col:

belongliness$`winning cluster` = max.col(belongliness[,5:8])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...