r - 将字符串向量中的每个元素附加到重复的数字序列中
问题描述
我有一个没有示例名称的数据框。我有这些样本名称的向量,但长度不等于数据框中的行。这是因为每个样本都有几个“峰值”行。
我想将样本名称向量的第一个元素附加到“Peaks”中从 1 开始的每个重复数字序列。
这是我所拥有的:
Sample_Names <- c("S1","S2","S3")
Data <- tibble(Peak = c(1:3,1:2,1:4),
Value = c(101:109))
Peak Value
1 101
2 102
3 103
1 104
2 105
1 106
2 107
3 108
4 109
我想按顺序添加我的 sample_names 向量的每个元素,对于每个重复的数字序列来得到这个:
Sample Peak Value
S1 1 101
S1 2 102
S1 3 103
S2 1 104
S2 2 105
S3 1 106
S3 2 107
S3 3 108
S3 4 109
任何帮助将不胜感激 :)
解决方案
一个选项dplyr
是rep
在获得具有累积总和的分组元素的计数后找到“Sample_Names”
library(dplyr)
Data %>%
mutate(Sample = rep(Sample_Names, tabulate(cumsum(Peak==1))))
# A tibble: 9 x 3
# Peak Value Sample
# <int> <int> <chr>
#1 1 101 S1
#2 2 102 S1
#3 3 103 S1
#4 1 104 S2
#5 2 105 S2
#6 1 106 S3
#7 2 107 S3
#8 3 108 S3
#9 4 109 S3
或使用data.table
library(data.table)
setDT(Data)[, Sample := rep(Sample_Names, tabulate(cumsum(Peak==1))) ]
或者另一个选项na.locf
来自zoo
library(zoo)
setDT(Data)[Peak == 1, Sample := Sample_Names][, Sample := na.locf(Sample)][]
推荐阅读
- graph - 从 Bazel 依赖关系图中排除 @npm// 依赖关系(bazel 查询)
- macos - 如何在 Mac 上完整(具有所有功能 - ACL 支持/Xattr 支持/xxhash 库/zstd 库)安装(编译)rsync v3.2.3?
- .net-core - 从linux打包针对net 4.8的nuget
- css - 在材质工具栏上水平显示 css 线
- c++ - 为什么链接器无法解析符号?
- reactjs - 如何使用 Webpack 构建显示 console.logs?
- aws-codebuild - 无法更新 CodeBuild 中的服务角色,出现错误“该策略未附加到角色”
- java - 可选的 Spring web NullPointer 异常
- javascript - 如何在javascript中附加孩子的孩子?
- java - 如何在 AWS Lambda Java 代码中启用断言?