R.如何按条件计算行号并放入新列
我一直在绞尽脑汁试图解决R中一个看似简单的问题。考虑到下面名为“data”的数据集,我想计算data$ID列的事件数,然后将其放入一个新列中。例如,新数据$new的第一个条目是19,因为ID出现了19次。我似乎无法解释如何做到这一点R.如何按条件计算行号并放入新列,r,R,我一直在绞尽脑汁试图解决R中一个看似简单的问题。考虑到下面名为“data”的数据集,我想计算data$ID列的事件数,然后将其放入一个新列中。例如,新数据$new的第一个条目是19,因为ID出现了19次。我似乎无法解释如何做到这一点 PRAY NOTES ID DURATION 1 NA <NA> 1_MENS_10 60 2 NA <NA> 1_MENS_10 60 3 NA <
PRAY NOTES ID DURATION
1 NA <NA> 1_MENS_10 60
2 NA <NA> 1_MENS_10 60
3 NA <NA> 1_MENS_10 60
4 NA <NA> 1_MENS_10 60
5 NA <NA> 1_MENS_10 60
6 NA <NA> 1_MENS_10 60
7 NA <NA> 1_MENS_10 60
8 NA <NA> 1_MENS_10 60
9 NA <NA> 1_MENS_10 60
10 NA <NA> 1_MENS_10 60
11 NA <NA> 1_MENS_10 60
12 NA <NA> 1_MENS_10 60
13 NA <NA> 1_MENS_10 60
14 NA <NA> 1_MENS_10 60
15 NA <NA> 1_MENS_10 60
16 NA <NA> 1_MENS_10 60
17 NA <NA> 1_MENS_10 60
18 NA <NA> 1_MENS_10 60
19 NA <NA> 1_MENS_10 60
20 2 <NA> 1_MENS_14 61
21 3 <NA> 1_MENS_14 61
22 2 <NA> 1_MENS_14 61
23 1 <NA> 1_MENS_14 61
24 1 <NA> 1_MENS_14 61
25 3 <NA> 1_MENS_14 61
26 2 <NA> 1_MENS_14 61
27 3 <NA> 1_MENS_14 61
28 1 <NA> 1_MENS_14 61
29 3 <NA> 1_MENS_14 61
30 3 <NA> 1_MENS_14 61
使用
数据表
包:
library(data.table)
setDT(DATA)[, NEW := .N, by = ID]
DATA
## PRAY NOTES ID DURATION NEW
## 1: NA <NA> 1_MENS_10 60 19
## 2: NA <NA> 1_MENS_10 60 19
## 3: NA <NA> 1_MENS_10 60 19
## 4: NA <NA> 1_MENS_10 60 19
## 5: NA <NA> 1_MENS_10 60 19
## 6: NA <NA> 1_MENS_10 60 19
## 7: NA <NA> 1_MENS_10 60 19
....
库(data.table)
setDT(DATA)[,NEW:=.N,by=ID]
资料
##祈祷笔记持续时间新
##1:NA 1_MENS_10 60 19
##2:NA 1_MENS_10 60 19
##3:NA 1_MENS_10 60 19
##4:NA 1_MENS_10 60 19
##5:NA 1_MENS_10 60 19
##6:NA 1_MENS_10 60 19
##7:NA 1_MENS_10 60 19
....
setDT
通过引用将data.frame
转换为data.table
(意思是不复制数据),因此速度非常快。然后,我们通过ID
进行聚合,并使用.N
内置特殊变量添加一个新列new
,其中包含该组的计数
注意:在中,setDF
函数现在被导出,这使您可以再次通过引用返回到data.frame
。因此,如果出于某种原因您想坚持使用data.frame
,您可以在结果上执行:setDF(.)
plyr
将很容易做到这一点,让您能够坚持使用数据帧:
library(plyr)
dat <- ddply(dat, .(ID), transform, NEW=length(ID))
库(plyr)
dat以下是用于完成该集合的dplyr
等效项:
library(dplyr)
DATA <- DATA %>% group_by(ID) %>% mutate(ID_Counts = n())
head(DATA)
#Source: local data frame [6 x 6]
#Groups: ID
#
# PRAY NOTES ID DURATION NEW ID_Counts
#1 NA <NA> 1_MENS_10 60 19 19
#2 NA <NA> 1_MENS_10 60 19 19
#3 NA <NA> 1_MENS_10 60 19 19
#4 NA <NA> 1_MENS_10 60 19 19
#5 NA <NA> 1_MENS_10 60 19 19
#6 NA <NA> 1_MENS_10 60 19 19
库(dplyr)
数据%group\U by(ID)%%>%变异(ID\U计数=n())
总目(数据)
#来源:本地数据帧[6 x 6]
#组:ID
#
#祈祷笔记ID持续时间新ID_计数
#1国民10 60 19 19
#2 NA 1男子10 60 19 19
#3国民10 60 19 19
#4国民10 60 19 19
#5国民10 60 19 19
#6国民10 60 19 19
@Arun,setDF()
听起来很棒。除了下面的答案,你也可以不用额外的软件包就能实现。例如,尝试类似于df$new的东西,我们一直在等你……:)
library(dplyr)
DATA <- DATA %>% group_by(ID) %>% mutate(ID_Counts = n())
head(DATA)
#Source: local data frame [6 x 6]
#Groups: ID
#
# PRAY NOTES ID DURATION NEW ID_Counts
#1 NA <NA> 1_MENS_10 60 19 19
#2 NA <NA> 1_MENS_10 60 19 19
#3 NA <NA> 1_MENS_10 60 19 19
#4 NA <NA> 1_MENS_10 60 19 19
#5 NA <NA> 1_MENS_10 60 19 19
#6 NA <NA> 1_MENS_10 60 19 19