提问人:jcorn427 提问时间:10/27/2023 最后编辑:jcorn427 更新时间:10/28/2023 访问量:48
将字符串和数据框转换为另一个数据框
Convert character string and data frame into another data frame
问:
我有一个单行数据框,如下所示:
Donor Treatment Timepoint
MK434_016 WT5 ST002_50uM 6hr
还有一个字符串,如下所示:
[1] "AAACAAGCAAACAAGAATTCGGTT-1" "AAACAAGCAAACAATCATTCGGTT-1" "AAACAAGCAAACCTGAATTCGGTT-1" "AAACAAGCAAACTTGGATTCGGTT-1"
[5] "AAACAAGCAAAGACCCATTCGGTT-1" "AAACAAGCAAAGGTAAATTCGGTT-1"
我想将两者合并以创建一个如下所示的数据框:
Donor Treatment Timepoint
AAACAAGCAAACAAGAATTCGGTT-1 WT5 ST002_50uM 6hr
AAACAAGCAAACAATCATTCGGTT-1 WT5 ST002_50uM 6hr
AAACAAGCAAACCTGAATTCGGTT-1 WT5 ST002_50uM 6hr
etc...
我尝试使用 rbind() 或 paste() 以几种不同的方式合并它们,但不知道如何获得我正在寻找的完整数据帧。
答:
3赞
r2evans
10/27/2023
#1
我将首先将它们连接在一起,而不使用行名,因为有些工具支持它们,有些工具会忽略它们,有些工具会主动删除它们。
df2 <- cbind(df1[rep(1, length(strings)),], data.frame(barcode = strings))
df2
# Donor Treatment Timepoint barcode
# MK434_016 WT5 ST002_50uM 6hr AAACAAGCAAACAAGAATTCGGTT-1
# MK434_016.1 WT5 ST002_50uM 6hr AAACAAGCAAACAATCATTCGGTT-1
# MK434_016.2 WT5 ST002_50uM 6hr AAACAAGCAAACCTGAATTCGGTT-1
# MK434_016.3 WT5 ST002_50uM 6hr AAACAAGCAAACTTGGATTCGGTT-1
# MK434_016.4 WT5 ST002_50uM 6hr AAACAAGCAAAGACCCATTCGGTT-1
# MK434_016.5 WT5 ST002_50uM 6hr AAACAAGCAAAGGTAAATTCGGTT-1
从这里开始,如果你真的想从列中删除信息并使它们成为行名,这很简单:barcode
rownames(df2) <- df2$barcode
df2$barcode <- NULL
df2
# Donor Treatment Timepoint
# AAACAAGCAAACAAGAATTCGGTT-1 WT5 ST002_50uM 6hr
# AAACAAGCAAACAATCATTCGGTT-1 WT5 ST002_50uM 6hr
# AAACAAGCAAACCTGAATTCGGTT-1 WT5 ST002_50uM 6hr
# AAACAAGCAAACTTGGATTCGGTT-1 WT5 ST002_50uM 6hr
# AAACAAGCAAAGACCCATTCGGTT-1 WT5 ST002_50uM 6hr
# AAACAAGCAAAGGTAAATTCGGTT-1 WT5 ST002_50uM 6hr
快速版本:dplyr
library(dplyr)
df1[rep(1, length(strings)),] %>%
`rownames<-`(NULL) %>%
mutate(barcode = strings) %>%
tibble::column_to_rownames("barcode")
# Donor Treatment Timepoint
# AAACAAGCAAACAAGAATTCGGTT-1 WT5 ST002_50uM 6hr
# AAACAAGCAAACAATCATTCGGTT-1 WT5 ST002_50uM 6hr
# AAACAAGCAAACCTGAATTCGGTT-1 WT5 ST002_50uM 6hr
# AAACAAGCAAACTTGGATTCGGTT-1 WT5 ST002_50uM 6hr
# AAACAAGCAAAGACCCATTCGGTT-1 WT5 ST002_50uM 6hr
# AAACAAGCAAAGGTAAATTCGGTT-1 WT5 ST002_50uM 6hr
数据
df1 <- structure(list(Donor = "WT5", Treatment = "ST002_50uM", Timepoint = "6hr"), class = "data.frame", row.names = "MK434_016")
strings <- c("AAACAAGCAAACAAGAATTCGGTT-1", "AAACAAGCAAACAATCATTCGGTT-1", "AAACAAGCAAACCTGAATTCGGTT-1", "AAACAAGCAAACTTGGATTCGGTT-1", "AAACAAGCAAAGACCCATTCGGTT-1", "AAACAAGCAAAGGTAAATTCGGTT-1")
评论
0赞
jcorn427
10/27/2023
这效果很好!谢谢。复制 df 以等于我的字符串的长度是我所缺少的。
1赞
Andre Wildberg
10/27/2023
旁注,您可以通过使用 代替 来简化基本解决方案。data.frame(df1[rep(1, length(strings)),], row.names=strings)
data.frame
cbind
2赞
thelatemail
10/27/2023
这也是一个合并操作——merge(df1, list(barcode=strings), by=NULL)
1赞
IceCreamToucan
10/28/2023
#2
使用数据,如@r2evans的答案
library(dplyr)
df1 %>%
reframe(barcode = strings, across(everything()))
#> barcode Donor Treatment Timepoint
#> 1 AAACAAGCAAACAAGAATTCGGTT-1 WT5 ST002_50uM 6hr
#> 2 AAACAAGCAAACAATCATTCGGTT-1 WT5 ST002_50uM 6hr
#> 3 AAACAAGCAAACCTGAATTCGGTT-1 WT5 ST002_50uM 6hr
#> 4 AAACAAGCAAACTTGGATTCGGTT-1 WT5 ST002_50uM 6hr
#> 5 AAACAAGCAAAGACCCATTCGGTT-1 WT5 ST002_50uM 6hr
#> 6 AAACAAGCAAAGGTAAATTCGGTT-1 WT5 ST002_50uM 6hr
创建于 2023-10-27 使用 reprex v2.0.2
评论
rownames(
rownames(my_transplant_df) <- my_string_vector_cell_barcodes
your_df = your_df[rep(1, length(your_char_string)), ]
rownames(your_df) = your_char_string