我有这样的数据集:
case x y
1 4 5
2 4 5
3 8 9
4 7 9
5 6 3
6 6 3我想创建一个分组变量。当x和y都相同时,这个变量应该有相同的值。我不在乎这个价值是什么,但它是分组他们。因为在我的数据集中,如果x和y在两种情况下是相同的,它们可能是同一个组织的一部分。我想看看有哪些组织。
因此,我喜欢的数据集如下所示:
case x y org
1 4 5 1
2 4 5 1
3 8 9 2
4 7 9 3
5 6 3 4
6 6 3 4我要怎么用R来编程呢?
发布于 2017-10-03 00:18:46
来自dplyr的使用group_indices的解决方案。
library(dplyr)
dt2 <- dt %>%
mutate(org = group_indices(., x, y))
dt2
case x y org
1 1 4 5 1
2 2 4 5 1
3 3 8 9 4
4 4 7 9 3
5 5 6 3 2
6 6 6 3 2如果组号需要按顺序排列,我们可以在创建rleid列之后使用data.table包中的org,如下所示。
library(dplyr)
library(data.table)
dt2 <- dt %>%
mutate(org = group_indices(., x, y)) %>%
mutate(org = rleid(org))
dt2
case x y org
1 1 4 5 1
2 2 4 5 1
3 3 8 9 2
4 4 7 9 3
5 5 6 3 4
6 6 6 3 4更新
下面是如何排列dplyr中的列。
library(dplyr)
dt %>%
arrange(x)
case x y
1 1 4 5
2 2 4 5
3 5 6 3
4 6 6 3
5 4 7 9
6 3 8 9我们还可以对多个列(如arrange(x, y) )执行此操作,也可以使用desc来反转oder,如arrange(desc(x))。
数据
dt <- read.table(text = " case x y
1 4 5
2 4 5
3 8 9
4 7 9
5 6 3
6 6 3",
header = TRUE)发布于 2017-10-03 00:26:22
正如您所说的,--我不在乎这个值是什么--,您只需执行以下操作
dt$new=as.numeric(as.factor(paste(dt$x,dt$y)))
dt
case x y new
1 1 4 5 1
2 2 4 5 1
3 3 8 9 4
4 4 7 9 3
5 5 6 3 2
6 6 6 3 2https://stackoverflow.com/questions/46535439
复制相似问题