计数数据曲线数据帧中r .



存在一个正在卸载的数据帧,其中包含大量行(数万行)。问题是日期框架加载不正确——数据中有空白。

的例子:

df <- data.frame(Region=c(NA,'region2','region1',NA,'region3','region3',NA,'region5'), Event=c('region1','event1','event1','region2','event1','event1','region4','event1'), Campaign=c('event1','campaign2','campaing1','event1','campaing1','campaign2','event1',NA))

我需要计算每个Region对应Event的数量。我所发现的就是应用这样的代码:

df <- df %>%
select(Region, Event) %>% 
group_by(Region, Event) %>%
summarise(Event = n())

但是正如你所理解的,这并不能解决问题:)因为它留下了很多缺失的数据…

但是在这个日期框架中,我们看到一个特定的模式被保留了-在区域列之后总是有一个事件列! 事件(总是相同的,但是有许多区域) .

在这种情况下如何使用R来计算每个区域的所有事件?

据我所知,你的主要问题是在你的数据行。有些行在第一列中有一个空白,然后在第二列中以第一个的值开始。

df
Region   Event  Campaign
1    <NA> region1    event1
2 region2  event1 campaign2
3 region1  event1 campaing1
4    <NA> region2    event1
5 region3  event1 campaing1
6 region3  event1 campaign2
7    <NA> region4    event1
8 region5  event1      <NA>

一种可能的纠正方法是,将数据作为两个部分来处理。一个是每列的正确值分配,另一个是有问题的值,这些值被纠正,最后所有内容都绑定在一起进行分析:

library(dplyr)
dfn <- df %>% 
# lets get the problematic values first
dplyr::filter(is.na(Region)) %>% 
# migrate values between columns
dplyr::transmute(Region = Event, 
Event = Campaign, 
Campaign = NA) %>%
# bind the data with correct allocations 
dplyr::union_all(dplyr::filter(df, !is.na(Region)))
# now the analysis should give the wanted results
dfn %>% 
dplyr::count(Region)
Region n
1 region1 2
2 region2 2
3 region3 2
4 region4 1
5 region5 1

根据注释,是获取"event1"之前的列值的另一种方法。出现次数(同一行)

df %>% 
# work the data row wise
dplyr::rowwise() %>% 
# look up content in vector of column content of that row, subtract 1 and look this up the the vector of all column content
dplyr::mutate(res = c(Region, Event, Campaign)[match("event1", c(Region, Event, Campaign)) - 1]) %>%
# release row binding (prevents unwanted behaviour down stream)
dplyr::ungroup() %>%
# count
dplyr::count(res)
# A tibble: 5 x 2
res         n
<chr>   <int>
1 region1     2
2 region2     2
3 region3     2
4 region4     1
5 region5     1

相关内容

  • 没有找到相关文章

最新更新