Как мне создать новую категориальную переменную из нескольких непрерывных наблюдений? - PullRequest
0 голосов
/ 25 сентября 2018

Это мои данные:

ID  dist
1   23
1   10
2   12
2   20
3   14
3   33

Я хочу просмотреть каждый идентификатор и создать новый столбец («состояние») для большего значения для каждого идентификатора, назвать его «высокий» и дляменьшее значение, назовите его «низкий».

Какой лучший способ сделать это?

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Использование базы R

> transform(df1, state = ave(dist, ID, FUN= function(x)ifelse(x==max(x), "high", "low")))

  ID dist state
1  1   23  high
2  1   10   low
3  2   12   low
4  2   20  high
5  3   14   low
6  3   33  high
0 голосов
/ 25 сентября 2018

С данными.таблицы ...

library(data.table)
setDT(DF)

DF[order(ID, dist), v := c("lo", "hi")]

   ID dist  v
1:  1   23 hi
2:  1   10 lo
3:  2   12 lo
4:  2   20 hi
5:  3   14 lo
6:  3   33 hi
0 голосов
/ 25 сентября 2018

Мы можем создать условие с помощью max/min

library(dplyr)
df1 %>%
  group_by(ID) %>%
  mutate(state = case_when(dist == max(dist) ~  "high",
                           dist == min(dist) ~ "low",
                           TRUE  ~ NA_character_))

Поскольку для каждого идентификатора есть два значения, второе условие не требуется

df1 %>%
  group_by(ID) %>%
  mutate(state = case_when(dist == max(dist) ~  "high",
                         TRUE  ~"low"))

data

df1 <- structure(list(ID = c(1L, 1L, 2L, 2L, 3L, 3L), dist = c(23L, 
10L, 12L, 20L, 14L, 33L)), class = "data.frame", row.names = c(NA, 
-6L))
...