首页 \ 问答 \ 通过dplyr在组内应用rep()(Applying rep() within groups through dplyr)

通过dplyr在组内应用rep()(Applying rep() within groups through dplyr)

我一直在尝试在组内复制1和2的二进制输出。 我想使用repdplyr ,但我似乎无法理解如何在组内应用rep 。 我已经能够通过手动分离分组并指定每组的正确范围来实现。 我想知道如何使用dplyr应用rep

这是一个示例数据。

df <- data.frame(date = c("2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02"),
                 loc =c("AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "CD", "CD", "CD", "CD", "CD", "CD", "CD", "CD", "CD", "CD"),
                 cat = c("a", "a", "a", "b", "b", "b", "b", "b", "c", "c", "c", "c", "c", "d", "d", "d", "d", "d"))

这基本上是我在整个数据集上应用的每个分组运行的代码。

df$type <- rep(1:2,nrow(df)/2)

如您所见,输出忽略了列catcat b & d应该从1开始。

         date loc cat type
1  2017-01-01  AB   a    1
2  2017-01-01  AB   a    2
3  2017-01-01  AB   a    1
4  2017-01-01  AB   b    2
5  2017-01-01  AB   b    1
6  2017-01-01  AB   b    2
7  2017-01-01  AB   b    1
8  2017-01-02  AB   b    2
9  2017-01-02  CD   c    1
10 2017-01-02  CD   c    2
11 2017-01-02  CD   c    1
12 2017-01-02  CD   c    2
13 2017-01-02  CD   c    1
14 2017-01-02  CD   d    2
15 2017-01-02  CD   d    1
16 2017-01-02  CD   d    2
17 2017-01-02  CD   d    1

更新:这是所需的输出。

        date loc cat type
1  2017-01-01  AB   a    1
2  2017-01-01  AB   a    2
3  2017-01-01  AB   a    1
4  2017-01-01  AB   b    1
5  2017-01-01  AB   b    2
6  2017-01-01  AB   b    1
7  2017-01-01  AB   b    2
8  2017-01-02  AB   b    1
9  2017-01-02  CD   c    1
10 2017-01-02  CD   c    2
11 2017-01-02  CD   c    1
12 2017-01-02  CD   c    2
13 2017-01-02  CD   c    1
14 2017-01-02  CD   d    1
15 2017-01-02  CD   d    2
16 2017-01-02  CD   d    1
17 2017-01-02  CD   d    2

I've been trying to replicate a binary output of 1 and 2 within groups. I'd like to make use of rep and dplyr, but I can't seem to understand how to apply rep within groups. I've been able to do it by manually separating the groupings and specifying the correct range per group. I would like to know how repcould be applied using dplyr.

Here's a sample data.

df <- data.frame(date = c("2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02"),
                 loc =c("AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "CD", "CD", "CD", "CD", "CD", "CD", "CD", "CD", "CD", "CD"),
                 cat = c("a", "a", "a", "b", "b", "b", "b", "b", "c", "c", "c", "c", "c", "d", "d", "d", "d", "d"))

This is basically the code I run per grouping applied on the entire dataset.

df$type <- rep(1:2,nrow(df)/2)

As you can see, the output disregards the column cat. cat b & d should have started at 1.

         date loc cat type
1  2017-01-01  AB   a    1
2  2017-01-01  AB   a    2
3  2017-01-01  AB   a    1
4  2017-01-01  AB   b    2
5  2017-01-01  AB   b    1
6  2017-01-01  AB   b    2
7  2017-01-01  AB   b    1
8  2017-01-02  AB   b    2
9  2017-01-02  CD   c    1
10 2017-01-02  CD   c    2
11 2017-01-02  CD   c    1
12 2017-01-02  CD   c    2
13 2017-01-02  CD   c    1
14 2017-01-02  CD   d    2
15 2017-01-02  CD   d    1
16 2017-01-02  CD   d    2
17 2017-01-02  CD   d    1

UPDATE: Here's the desired output.

        date loc cat type
1  2017-01-01  AB   a    1
2  2017-01-01  AB   a    2
3  2017-01-01  AB   a    1
4  2017-01-01  AB   b    1
5  2017-01-01  AB   b    2
6  2017-01-01  AB   b    1
7  2017-01-01  AB   b    2
8  2017-01-02  AB   b    1
9  2017-01-02  CD   c    1
10 2017-01-02  CD   c    2
11 2017-01-02  CD   c    1
12 2017-01-02  CD   c    2
13 2017-01-02  CD   c    1
14 2017-01-02  CD   d    1
15 2017-01-02  CD   d    2
16 2017-01-02  CD   d    1
17 2017-01-02  CD   d    2

原文:https://stackoverflow.com/questions/43462154
更新时间:2022-08-08 15:08

最满意答案

在当前的实现中,最快的方法是检查是否添加了pause类,如果是,则跳过动画: if($this.classList.contains('pause'))continue; 但是,由于所有current项都是在slideShows每次迭代中使用document.querySelectorAll('.current')处理的,因此您可能希望删除内部循环并使用$this.querySelector('.current')来获取当前项目具体的幻灯片放映:

var slideshows = document.querySelectorAll('.slideshow');
function startSlideshow() {
    return window.setInterval(function(){
        for (var i=0;i<slideshows.length;i++){
          var $this = slideshows[i];
          if($this.classList.contains('pause'))continue;
          var e  = $this.querySelector('.current');
          (e.nextElementSibling || $this.firstElementChild).classList.add('current');
          e.classList.remove('current');            
        }
    }, 1000);
}
var id = startSlideshow();

for (var i=0;i<slideshows.length;i++){
    slideshows[i].addEventListener('click', function(){
        this.classList.toggle('pause');
    });
}

另一个选择是让每个幻灯片包含自己的计时器,并启动/停止它。 但是,这可能会导致它们在停止/启动后彼此不同步。

顺便说一句,您可以使用对象,设置dataSet属性或从slideshows阵列中添加/删除div,而不是添加暂停类。


In your current implementation, the quickest way is to check if the pause class is added and skip the animation if it is: if($this.classList.contains('pause'))continue; However, since all current items are handled with document.querySelectorAll('.current') inside each iteration of slideShows, you might want to remove the inner loop and use $this.querySelector('.current') to get the current item of that specific slide show:

var slideshows = document.querySelectorAll('.slideshow');
function startSlideshow() {
    return window.setInterval(function(){
        for (var i=0;i<slideshows.length;i++){
          var $this = slideshows[i];
          if($this.classList.contains('pause'))continue;
          var e  = $this.querySelector('.current');
          (e.nextElementSibling || $this.firstElementChild).classList.add('current');
          e.classList.remove('current');            
        }
    }, 1000);
}
var id = startSlideshow();

for (var i=0;i<slideshows.length;i++){
    slideshows[i].addEventListener('click', function(){
        this.classList.toggle('pause');
    });
}

Another option is to have each slideshow contain its own timer, and start/stop that. However that could cause them to run out of sync with each other after a stop/start.

As an aside, instead of adding a pause class, you could also use objects, set a dataSet property or have the div add/remove itself from the slideshows array

相关问答

更多

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。