Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R.如何按条件计算行号并放入新列_R - Fatal编程技术网

R.如何按条件计算行号并放入新列

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 <

我一直在绞尽脑汁试图解决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  <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