我有以下数据集
Date Value Gen
16 Mar 100 Gen1
16 Mar 9 Gen2
12 Mar 15 Gen1
12 Mar 18 Gen2
我尝试过使用dcast和group by函数,但是我认为这不能满足我的需求。
我正在寻找的结果是:
Date1 Gen1 Gen2
12 Mar 100 15
16 Mar 9 18
注意:日期值组合在一起,并且每个Gen值都变成一列。这些值如上表所示。每个数据点都可用,因此不应该有N / a。
我尝试了分组方式: 代码:
library(dplyr)
aa %>% group_by(Date1, Value) %>%
mutate(id= paste("new_col_",row_number())) %>%
ungroup() %>%
spread(id, Value)
结果:
Date1 Gen1 Gen2 `new_col_ 1`
<fct> <chr> <chr> <fct>
12_Mar Gen1 NA 100
12_Mar NA Gen2 NA Gen4 15
8_Mar NA Gen2 NA NA 9
8_Mar NA NA Gen3 NA 15
我尝试过dcast,它给了我类似的结果。
example <- dcast(df,Value + Date1 ~ Gen)
Value Date1 Gen1 Gen2
100 16 Mar Gen1 <NA>
15 12 Mar Gen1 <NA>
18 12 Mar <NA> Gen2
9 16 Mar <NA> Gen2
感谢您的帮助。
答案 0 :(得分:1)
我们可以使用spread
library(tidyr)
spread(aa, Gen, Value)
# Date Gen1 Gen2
#1 12 Mar 15 18
#2 16 Mar 100 9
或使用dcast
library(data.table)
dcast(setDT(aa), Date ~ Gen, value.var = 'Value')
aa <- structure(list(Date = c("16 Mar", "16 Mar", "12 Mar", "12 Mar"
), Value = c(100L, 9L, 15L, 18L), Gen = c("Gen1", "Gen2", "Gen1",
"Gen2")), class = "data.frame", row.names = c(NA, -4L))