Я хотел бы выполнить вменения переменной, чтобы она была постоянной в каждом id
. То есть var1
может иметь только одно отличное значение для каждого id
.Как выполнить вменения переменной, учитывая количество вхождений значений для одной и той же переменной?
Одним из них является выполнение вменений с учетом количества вхождений значений существующей переменной, а также некоторых других условий.
df_old<- read.table(header = TRUE, text = "
date id var1
25/01/2016 1 A
02/05/2016 1 A
20/03/2016 1 B
13/07/2016 1 NA
20/03/2016 2 B
28/04/2016 2 C
20/03/2016 3 B
28/04/2016 3 OTHERS
28/04/2016 3 OTHERS
20/10/2016 4 NA
28/11/2016 4 NA
",stringsAsFactors=FALSE)
Мы фокусируемся на var1
здесь. Внутри каждого id
:
- Если
var1
имеет либоA
,B
илиC
, то приписыватьvar1
со значением, которое происходит больше всего. например дляid=1
, он имеет два отличных значенияvar1
(A
иB
), поэтому мы приписываем егоA
, так как он встречается больше всего. Нанесите недостающее значение наA
. - Если
var1
имеет либоA
,B
илиC
, и два различныхvar1
значений имеют одинаковое количество вхождений, то приписывать значениеvar1
с тем, что происходит последнее. Дляid=2
он имеет одинB
и одинC
. Мы приписываем егоC
, так как соответствующая ему дата встречается последней. - Если
var1
содержит два различных значения один из этого является либоA
/B
/C
и другойOTHERS
, мы всегда приписывать используяA
/B
/C
. Следовательно, дляid=3
мы примем, используяB
вместоOTHERS
. - Если
var1
содержит толькоOTHERS
, тогда он останетсяOTHERS
. - Для
id=4
, где он не имеет значенийvar1
, они останутся пропущенными.
Таким образом, новый dataframe должен выглядеть следующим образом:
df_new<- read.table(header = TRUE, text = "
date id var1
25/01/2016 1 A
02/05/2016 1 A
20/03/2016 1 A
13/07/2016 1 A
20/03/2016 2 C
28/04/2016 2 C
20/03/2016 3 B
28/04/2016 3 B
28/04/2016 3 B
20/10/2016 4 NA
28/11/2016 4 NA
",stringsAsFactors=FALSE)`
Я пытался выписать первый случай, но я не могу показаться, чтобы решить эту проблему и, следовательно, не может двигаться дальше других случаях.
library(dplyr)
df_old %>%
group_by(id,var1) %>%
mutate(n=n()) %>%
group_by(id) %>%
mutate(var1=if_else(n==min(n),var1[max(n)],var1[max(n)]))
или заменить последнюю строку с replace(var1,which(min(n)),var1[which(max(n))]))
Оба дают ошибки:
Error: invalid 'type' (closure) of argument"
Как это исправить?
Что делать, если группа содержит только «ДРУГИЕ»? Должна ли новая переменная быть «ДРУГИЕ»? – Psidom
@Psidom Да, я хотел бы, чтобы он оставался как «ДРУГИЕ». – HNSKD