如何从连续多次观察中创建新的分类变量?

时间:2018-09-25 15:58:14

标签: r dataframe dplyr tapply

这是我的数据

{{1}}

我想遍历每个ID,并为每个ID较大的值创建一个新列(“状态”),将其称为“高”,对于较低的值创建一个新列(“状态”),将其称为“低”。

最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

使用R base

> 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

答案 1 :(得分:0)

我们可以使用max/min

创建一个条件
library(dplyr)
df1 %>%
  group_by(ID) %>%
  mutate(state = case_when(dist == max(dist) ~  "high",
                           dist == min(dist) ~ "low",
                           TRUE  ~ NA_character_))

由于每个“ ID”都有两个值,因此不需要第二个条件

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

数据

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))

答案 2 :(得分:0)

带有data.table ...

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