dplyr: разделить все значения в группе по первому значению группы - PullRequest
0 голосов
/ 24 января 2019

Мой df выглядит примерно так:

ID    Obs    Value
1     1      26
1     2      13
1     3      52
2     1      1,5
2     2      30

Используя dplyr, я добавляю дополнительный столбец Col, который является результатом деления всех значений в значении столбца на первое значение группы вэтот столбец.

ID    Obs    Value    Col
1     1      26       1
1     2      13       0,5
1     3      52       2
2     1      1,5      1
2     2      30       20

Как мне это сделать?

1 Ответ

0 голосов
/ 24 января 2019

После группировки по «ID», используйте mutate, чтобы создать новый столбец, разделив «Значение» на first из «Значение»

library(dplyr)
df1 %>%
   group_by(ID) %>%
   mutate(Col = Value/first(Value))

Если first 'Значение' равно 0, и мы не хотим его использовать, тогда подставьте 'Значение' в логическое выражение и затем first этого

df1 %>%
   group_by(ID) %>%
    mutate(Col = Value/first(Value[Value != 0]))

Или в base R

df1$Col <- with(df1, Value/ave(Value, ID, FUN = head, 1))

ПРИМЕЧАНИЕ. Запятая в 'Value' предполагает, что это столбец character. В этом случае его сначала следует изменить на десятичное число (.), если это так, преобразовать в nunmeric, а затем выполнить деление. Это можно сделать при чтении данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...