我的测试数据如下
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
答案 0 :(得分:1)
一个选择是通过连接“区域”来mutate
到“区域”列,然后将spread
连接到“宽”
library(tidyverse)
test.data %>%
mutate(zone = str_c("zone_", zone)) %>%
spread(zone, val, fill = 0)