R group_by 并使用 mutate 计算具有条件的数据框列中的不同值
R group_by and count distinct values in dataframe column with condition, using mutate
R group_by 并使用 mutate
计算具有条件的数据框列中的不同值
这与问题 类似,但略有不同,因为我想与条件一起变异。计算每组中的不同值,但也存在于向量 c
中
id = c( 1, 1, 2, 2, 3, 4, 4, 5, 5, 5, 6, 6, 6, 6 )
val = c(100,100,200,300,400,500,500,500,600,600,200,200,300,500)
df <- data.frame(id=id, val=val)
c= c(200,500)
我知道下面的代码是错误的,但它给出了我正在尝试做的事情的想法。
因此,我想通过按 id 对 df 进行分组来创建第四列,其中不同值的计数在 c 中出现时给出
x <- df %>% group_by(id) %>%
mutate(distinctValues = n_distinct(val %in% c ))
如果我们考虑 id = 6,其中存在的 distict 值是 200,300 和 500。但是 c[=30= 中不存在 300 ].所以计数是= 2.
所以输出列将是
c(0,0,1,1,0,1,1,1,1,1,2,2,2,2)
由于 c
是唯一的,您可以从另一个方面来处理它 - 计算 val
.
中出现的 c
个值的数量
df %>%
group_by(id) %>%
mutate(distinctValues = sum(c %in% val))
# # A tibble: 14 x 3
# # Groups: id [6]
# id val distinctValues
# <dbl> <dbl> <int>
# 1 1 100 0
# 2 1 100 0
# 3 2 200 1
# 4 2 300 1
# 5 3 400 0
# 6 4 500 1
# 7 4 500 1
# 8 5 500 1
# 9 5 600 1
# 10 5 600 1
# 11 6 200 2
# 12 6 200 2
# 13 6 300 2
# 14 6 500 2
您也可以使用 distinctValues = sum(unique(val) %in% c)
如果这看起来更清楚 - 它可能效率稍低,但除非您的数据量很大,否则不足以影响。
对于n_distinct
,我们需要在行的子集上应用
library(dplyr)
df %>%
group_by(id) %>%
mutate(distinctValues = n_distinct(val[val %in% c]))
-输出
# A tibble: 14 x 3
# Groups: id [6]
# id val distinctValues
# <dbl> <dbl> <int>
# 1 1 100 0
# 2 1 100 0
# 3 2 200 1
# 4 2 300 1
# 5 3 400 0
# 6 4 500 1
# 7 4 500 1
# 8 5 500 1
# 9 5 600 1
#10 5 600 1
#11 6 200 2
#12 6 200 2
#13 6 300 2
#14 6 500 2
R group_by 并使用 mutate
计算具有条件的数据框列中的不同值这与问题
id = c( 1, 1, 2, 2, 3, 4, 4, 5, 5, 5, 6, 6, 6, 6 )
val = c(100,100,200,300,400,500,500,500,600,600,200,200,300,500)
df <- data.frame(id=id, val=val)
c= c(200,500)
我知道下面的代码是错误的,但它给出了我正在尝试做的事情的想法。 因此,我想通过按 id 对 df 进行分组来创建第四列,其中不同值的计数在 c 中出现时给出
x <- df %>% group_by(id) %>%
mutate(distinctValues = n_distinct(val %in% c ))
如果我们考虑 id = 6,其中存在的 distict 值是 200,300 和 500。但是 c[=30= 中不存在 300 ].所以计数是= 2.
所以输出列将是
c(0,0,1,1,0,1,1,1,1,1,2,2,2,2)
由于 c
是唯一的,您可以从另一个方面来处理它 - 计算 val
.
c
个值的数量
df %>%
group_by(id) %>%
mutate(distinctValues = sum(c %in% val))
# # A tibble: 14 x 3
# # Groups: id [6]
# id val distinctValues
# <dbl> <dbl> <int>
# 1 1 100 0
# 2 1 100 0
# 3 2 200 1
# 4 2 300 1
# 5 3 400 0
# 6 4 500 1
# 7 4 500 1
# 8 5 500 1
# 9 5 600 1
# 10 5 600 1
# 11 6 200 2
# 12 6 200 2
# 13 6 300 2
# 14 6 500 2
您也可以使用 distinctValues = sum(unique(val) %in% c)
如果这看起来更清楚 - 它可能效率稍低,但除非您的数据量很大,否则不足以影响。
对于n_distinct
,我们需要在行的子集上应用
library(dplyr)
df %>%
group_by(id) %>%
mutate(distinctValues = n_distinct(val[val %in% c]))
-输出
# A tibble: 14 x 3
# Groups: id [6]
# id val distinctValues
# <dbl> <dbl> <int>
# 1 1 100 0
# 2 1 100 0
# 3 2 200 1
# 4 2 300 1
# 5 3 400 0
# 6 4 500 1
# 7 4 500 1
# 8 5 500 1
# 9 5 600 1
#10 5 600 1
#11 6 200 2
#12 6 200 2
#13 6 300 2
#14 6 500 2