我有一个如下所示的数据框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"用于进一步分析的格式,但为此我需要一个索引变量。
答案 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