r - 对列值进行分组并避免 R 中的 N/a
问题描述
我有以下数据集
Date Value Gen
16 Mar 100 Gen1
16 Mar 9 Gen2
12 Mar 15 Gen1
12 Mar 18 Gen2
我曾尝试使用 dcast 和按功能分组,但我认为这不能满足我的需要。
我正在寻找的结果是:
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
任何帮助表示赞赏。
解决方案
我们可以用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))
推荐阅读
- python - 将带有电影名称的字幕从 movie_name 列表重命名为 subtitles_list 而不使用正则表达式
- c# - 不同维度的图像序列到视频FFMPEGCORE
- python - 如何增加 GAN 中输出图像的大小?
- go - 创建接受可变消息长度的简单 TCP 服务器失败
- c - 如何在 ac char 数组中检查一行的结尾,而结尾没有新行
- oracle - PLSQL/Oracle 嵌套 For 循环插入在 Oracle 12c 中需要很长时间
- angular - 迭代 JSON 对象并以角度打印多级值
- python - 如何将样式表应用到 QPushButton 的菜单
- symfony - Symfony4:不应用验证约束翻译
- reactjs - 内容安全政策不尊重元标记