Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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,我有一个数据框架,用于跟踪个人x(Bob)在感兴趣的时间段(1900-1999年)内的服务参与(srvc_inv{1,0}) 但是,我想确定Bob在感兴趣的时间段内的服务事件数(在本例中为2)。一个独特的服务事件将通过连续日期的服务中断来识别。有人知道怎么编程吗?谢谢 一种可能是: dat %>% group_by(name) %>% mutate(rleid = with(rle(srvc_inv), rep(seq_along(lengths), lengths))) %&g

我有一个数据框架,用于跟踪个人x(Bob)在感兴趣的时间段(1900-1999年)内的服务参与(srvc_inv{1,0})


但是,我想确定Bob在感兴趣的时间段内的服务事件数(在本例中为2)。一个独特的服务事件将通过连续日期的服务中断来识别。有人知道怎么编程吗?谢谢

一种可能是:

dat %>%
 group_by(name) %>%
 mutate(rleid = with(rle(srvc_inv), rep(seq_along(lengths), lengths))) %>%
 summarise(ever_inv = n_distinct(rleid[srvc_inv == 1]))

  name  ever_inv
  <fct>    <int>
1 Bob          2
dat%>%
分组单位(名称)%>%
变异(rleid=带有(rle(srvc_inv),代表(沿(长度)的顺序),长度))%>%
摘要(ever_inv=n_distinct(rleid[srvc_inv==1]))
名称:永利投资
1鲍勃2

基于基本R
rle的又一个解决方案

library(dplyr)
dat %>% group_by(name) %>% 
        summarise(ever_inv = length(with(rle(srvc_inv), lengths[values==1])))

# A tibble: 1 x 2
name  ever_inv
  <fct>    <int>
1 Bob          2
库(dplyr)
dat%%>%group_按(名称)%%>%
总结(ever_inv=长度(带(rle(srvc_inv),长度[值==1]))
#一个tibble:1x2
名称:永利投资
1鲍勃2
除了
rle()
之外,您还可以使用
diff()


假设
srvc\u inv
为0或1,这就足够对
rle
对象的
value
组件求和,该组件返回1次运行的次数。

非常感谢!快速问题-查询外部数据库时RLE是否工作?“dat”输入将来自Oracle数据库,我计划使用dplyr/dbplyr编写查询,然后将R转换为SQL。我只是想知道,这个操作将在一个具有大量数据的数据集上执行records@DJC很抱歉,我认为这是不可能的,因为
rle
基本R函数和
dplyr
将无法将其转换为有效的SQL。
dat %>%
 group_by(name) %>%
 mutate(rleid = with(rle(srvc_inv), rep(seq_along(lengths), lengths))) %>%
 summarise(ever_inv = n_distinct(rleid[srvc_inv == 1]))

  name  ever_inv
  <fct>    <int>
1 Bob          2
library(dplyr)
dat %>% group_by(name) %>% 
        summarise(ever_inv = length(with(rle(srvc_inv), lengths[values==1])))

# A tibble: 1 x 2
name  ever_inv
  <fct>    <int>
1 Bob          2
dat %>%
  group_by(name) %>%
  summarise(ever_inv = sum(diff(c(0, srvc_inv)) > 0))

#   A tibble: 1 x 2
#   name  ever_inv
#   <fct>    <int>
# 1 Bob          2
dat %>%
  group_by(name) %>%
  summarise(ever_inv = sum(rle(srvc_inv)$value))

#   A tibble: 1 x 2
#   name  ever_inv
#   <fct>    <int>
# 1 Bob          2