R:通过ID计算2列的商
R: calculate the quotient of 2 columns by ID
这是我的数据:
ID nb ecart
ID1 3 NA
ID1 3 0
ID1 3 1.5
ID2 2 NA
ID2 2 648
ID3 4 NA
ID3 4 0
ID3 4 0
ID3 4 7
我想计算每个ID =="0" 的电子购物车数量的百分比。
nb 是显示每个 ID 的行数的变量。
超出的结果:
ID nb ecart percentage
ID1 3 NA NA
ID1 3 0 1/3
ID1 3 1.5 NA
ID2 2 NA NA
ID2 2 648 NA
ID3 4 NA NA
ID3 4 0 2/4
ID3 4 0 2/4
ID3 4 7 NA
希望尽快得到您的答复!谢谢!
快速高效的data.table
解决方案
library(data.table)
setDT(df)[ecart == 0L, percentage := round(.N / nb, 2L), by = ID]
# ID nb ecart percentage
# 1: ID1 3 NA NA
# 2: ID1 3 0.0 0.33
# 3: ID1 3 1.5 NA
# 4: ID2 2 NA NA
# 5: ID2 2 648.0 NA
# 6: ID3 4 NA NA
# 7: ID3 4 0.0 0.50
# 8: ID3 4 0.0 0.50
# 9: ID3 4 7.0 NA
工作原理:仅当 ecart == 0L
通过计算子组的大小(使用 .N
) 除以 nb
或者(正如@CathG 所评论的那样),如果你想要一个漂亮的字符打印而不是一个数值,你可以这样做
setDT(df)[ecart == 0L, percentage := paste0(.N, "/", nb), by = ID]
或者如果您更喜欢使用二进制连接
setkey(setDT(df), ecart)[.(0L), percentage := paste0(.N, "/", nb), by = ID]
这是一个 dplyr
答案。
library(dplyr)
data %>%
group_by(ID) %>%
mutate(percentage =
ifelse(is.na(ecart),
NA,
sum(ecart == 0, na.rm = TRUE)/n()))
这是我的数据:
ID nb ecart
ID1 3 NA
ID1 3 0
ID1 3 1.5
ID2 2 NA
ID2 2 648
ID3 4 NA
ID3 4 0
ID3 4 0
ID3 4 7
我想计算每个ID =="0" 的电子购物车数量的百分比。
nb 是显示每个 ID 的行数的变量。
超出的结果:
ID nb ecart percentage
ID1 3 NA NA
ID1 3 0 1/3
ID1 3 1.5 NA
ID2 2 NA NA
ID2 2 648 NA
ID3 4 NA NA
ID3 4 0 2/4
ID3 4 0 2/4
ID3 4 7 NA
希望尽快得到您的答复!谢谢!
快速高效的data.table
解决方案
library(data.table)
setDT(df)[ecart == 0L, percentage := round(.N / nb, 2L), by = ID]
# ID nb ecart percentage
# 1: ID1 3 NA NA
# 2: ID1 3 0.0 0.33
# 3: ID1 3 1.5 NA
# 4: ID2 2 NA NA
# 5: ID2 2 648.0 NA
# 6: ID3 4 NA NA
# 7: ID3 4 0.0 0.50
# 8: ID3 4 0.0 0.50
# 9: ID3 4 7.0 NA
工作原理:仅当 ecart == 0L
通过计算子组的大小(使用 .N
) 除以 nb
或者(正如@CathG 所评论的那样),如果你想要一个漂亮的字符打印而不是一个数值,你可以这样做
setDT(df)[ecart == 0L, percentage := paste0(.N, "/", nb), by = ID]
或者如果您更喜欢使用二进制连接
setkey(setDT(df), ecart)[.(0L), percentage := paste0(.N, "/", nb), by = ID]
这是一个 dplyr
答案。
library(dplyr)
data %>%
group_by(ID) %>%
mutate(percentage =
ifelse(is.na(ecart),
NA,
sum(ecart == 0, na.rm = TRUE)/n()))