如何计算特定值的数量
How to count number of particular values
我的数据是这样的:
ID CO MV
1 0 1
1 5 0
1 0 1
1 9 0
1 8 0
1 0 1
2 69 0
2 0 1
2 8 0
2 0 1
2 78 0
2 53 0
2 0 1
2 3 0
3 54 0
3 0 1
3 8 0
3 90 0
3 0 1
3 56 0
4 0 1
4 56 0
4 0 1
4 45 0
4 0 1
4 34 0
4 31 0
4 0 1
4 45 0
5 0 1
5 0 1
5 67 0
我希望它看起来像这样:
ID CO MV CONUM
1 0 1 3
1 5 0 3
1 0 1 3
1 9 0 3
1 8 0 3
1 0 1 3
2 69 0 5
2 0 1 5
2 8 0 5
2 0 1 5
2 78 0 5
2 53 0 5
2 0 1 5
2 3 0 5
3 54 0 4
3 0 1 4
3 8 0 4
3 90 0 4
3 0 1 4
3 56 0 4
4 0 1 5
4 56 0 5
4 0 1 5
4 45 0 5
4 0 1 5
4 34 0 5
4 31 0 5
4 0 1 5
4 45 0 5
5 0 1 1
5 0 1 1
5 67 0 1
我想创建一个 CONUM 列,它是 ID 列中每个值的 CO 列中非零值的总数。因此,例如,ID 1 的 CO 列有 3 个非零值,因此 CONUM 列中的相应值为 3。如果 CO 列有值,则 MV 列为 0,如果 CO 列为 0,则 MV 列为 1。所以另一种方法可以完成创建 CONUM 列将计算每个 ID 的零数。如果您能帮助我使用 r 代码来完成此操作,那就太好了。谢谢
这里有一个选项data.table
library(data.table)
setDT(df)[,CONUM:=sum(CO!=0) ,ID][]
和 dplyr
选项
# install.packages("dplyr")
library(dplyr)
dat <- dat %>%
group_by(ID) %>%
mutate(CONUM = sum(CO != 0))
您可以在基数 R:
中使用 ave
dat <- transform(dat, CONUM = ave(as.logical(CO), ID, FUN = sum))
我的数据是这样的:
ID CO MV
1 0 1
1 5 0
1 0 1
1 9 0
1 8 0
1 0 1
2 69 0
2 0 1
2 8 0
2 0 1
2 78 0
2 53 0
2 0 1
2 3 0
3 54 0
3 0 1
3 8 0
3 90 0
3 0 1
3 56 0
4 0 1
4 56 0
4 0 1
4 45 0
4 0 1
4 34 0
4 31 0
4 0 1
4 45 0
5 0 1
5 0 1
5 67 0
我希望它看起来像这样:
ID CO MV CONUM
1 0 1 3
1 5 0 3
1 0 1 3
1 9 0 3
1 8 0 3
1 0 1 3
2 69 0 5
2 0 1 5
2 8 0 5
2 0 1 5
2 78 0 5
2 53 0 5
2 0 1 5
2 3 0 5
3 54 0 4
3 0 1 4
3 8 0 4
3 90 0 4
3 0 1 4
3 56 0 4
4 0 1 5
4 56 0 5
4 0 1 5
4 45 0 5
4 0 1 5
4 34 0 5
4 31 0 5
4 0 1 5
4 45 0 5
5 0 1 1
5 0 1 1
5 67 0 1
我想创建一个 CONUM 列,它是 ID 列中每个值的 CO 列中非零值的总数。因此,例如,ID 1 的 CO 列有 3 个非零值,因此 CONUM 列中的相应值为 3。如果 CO 列有值,则 MV 列为 0,如果 CO 列为 0,则 MV 列为 1。所以另一种方法可以完成创建 CONUM 列将计算每个 ID 的零数。如果您能帮助我使用 r 代码来完成此操作,那就太好了。谢谢
这里有一个选项data.table
library(data.table)
setDT(df)[,CONUM:=sum(CO!=0) ,ID][]
和 dplyr
# install.packages("dplyr")
library(dplyr)
dat <- dat %>%
group_by(ID) %>%
mutate(CONUM = sum(CO != 0))
您可以在基数 R:
中使用ave
dat <- transform(dat, CONUM = ave(as.logical(CO), ID, FUN = sum))