在R中创建观察索引变量?

时间:2018-01-25 21:36:40

标签: r indexing

我有一个如下所示的数据框data

> data
     id var1 var2
1  1000   32  2.3
2  1000   34  2.5
3  1000   33   NA
4  1000   36  2.4
5  1001   32  3.1
6  1001   NA  2.5
7  1001   45   NA
8  1002   45  2.6
9  1002   37   NA
10 1002   33  3.1
11 1002   NA  3.3

如您所见,每个ID都有多个观察值(每个3-4个)。我想添加另一个变量(列),它就像一个索引,并为ID中的每个观察数字编号。理想情况下,这是添加变量后数据框的样子:

> data_goal
     id var1 var2 index
1  1000   32  2.3     1
2  1000   34  2.5     2
3  1000   33   NA     3
4  1000   36  2.4     4
5  1001   32  3.1     1
6  1001   NA  2.5     2
7  1001   45   NA     3
8  1002   45  2.6     1
9  1002   37   NA     2
10 1002   33  3.1     3
11 1002   NA  3.3     4

在R中执行此操作的最佳方式是什么? 如果它是相关的,我的最终目标是将数据重塑为" wide"用于进一步分析的格式,但为此我需要一个索引变量。

2 个答案:

答案 0 :(得分:0)

library(data.table)
 setDT(dat)[,index:=seq(1,.N),by=id]

答案 1 :(得分:0)

以下是使用dplyr的解决方案:

# reproducing your data
data<- data.frame(rbind(c(1,1000,32,2.3),c(2,1000,34,2.5),c(3,1000,33,NA),
        c(4,1000,36,2.4),c(5,1001,32,3.1),c(6,1001,NA,2.5),c(7,1001,45,NA), 
        c(8,1002,45,2.6),c(9,1002,37,NA),c(10,1002,33,3.1),
        c(11,1002,NA,3.3)))

colnames(data)<-c("row", "id","var1","var2")

library(dplyr)

# use pipes ( %>% ) to do this in a single line of code
data_goal<-data %>% group_by(id) %>% mutate(index=1:n())

您也可以轻松使用dplyr重塑数据。如果您不熟悉,这是一个资源:https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf