R-分组依据并为分组结果创建新列

时间:2019-05-29 22:22:46

标签: r dataframe dplyr

我的测试数据如下

class Foo {
public:
  Foo(int i) {
    std::string devname = "/dev/device" + std::to_string(i);
    fd = open(devname.c_str(), O_RDWR);
  }

  Foo(const Foo &src) {
    fd = dup(src.fd);
  }
  // or: Foo(const Foo &) = delete;

  Foo(Foo &&src) : fd(-1) {
    src.swap(*this);
  }

  ~Foo() {
    if (fd != -1) {
      close(fd);
    }
  }

  bool valid() const {
    return (fd != -1); 
  }

  Foo& operator=(Foo rhs) {
    rhs.swap(*this);
    return *this;
  }
  // optional: Foo& operator=(const Foo &) = delete;

  void swap(Foo &other) {
    std::swap(fd, other.fd);
  }

private:
  int fd;
};

我需要首先按> date <- c('11:00', '12:00', '13:00', '11:00', '13:00', '13:00', '15:00') > zone <- c('a', 'a', 'a', 'b', 'b', 'c', 'c') > val <- c(1,2,3,4,5,6,7) > test.data <- data.frame(date, zone, val) > test.data date zone val 1 11:00 a 1 2 12:00 a 2 3 13:00 a 3 4 11:00 b 4 5 13:00 b 5 6 13:00 c 6 7 15:00 c 7 对结果进行分组。然后,为每个唯一的date添加一个新列。该列的值是从列zone中选取的,如果缺少则为0。

所需结果:

val

1 个答案:

答案 0 :(得分:1)

一个选择是通过连接“区域”来mutate到“区域”列,然后将spread连接到“宽”

library(tidyverse)
test.data %>%
    mutate(zone = str_c("zone_", zone)) %>% 
    spread(zone, val, fill = 0)