如何根据列索引粘贴两行 R 数据框?
How to paste two rows of an R dataframe based on a column index?
我有一个如下所示的 R 数据框:
rs2288741 rs1821185 rs1432315 ID
T A T A
T C T A
G C C B
T C T B
G A C C
G A C C
T A C D
T C T D
当“ID”等于下一个时,我需要粘贴行值。输出文件应如下所示:
rs2288741 rs1821185 rs1432315 ID
TT AC TT A
GT CC CT B
GG AA CC C
TT AC CT D
有什么简单的方法可以得到这个吗?
data.table
解决方案
setDT(mydata)[, lapply(.SD, paste0, collapse = ""), by = .(ID)]
# ID rs2288741 rs1821185 rs1432315
# 1: A TT AC TT
# 2: B GT CC CT
# 3: C GG AA CC
# 4: D TT AC CT
如果你使用 tidyverse,你可以这样做:
library(tidyverse)
df %>%
group_by(ID) %>%
summarize(across(everything(), ~ paste(.x, collapse = ''))) %>%
select(2:4, 1)
#> # A tibble: 4 x 4
#> rs2288741 rs1821185 rs1432315 ID
#> <chr> <chr> <chr> <chr>
#> 1 TT AC TT A
#> 2 GT CC CT B
#> 3 GG AA CC C
#> 4 TT AC CT D
由 reprex package (v2.0.1)
于 2022-04-11 创建
基础 R 版本可以是
aggregate(. ~ ID, data = df, function(x) paste(x, collapse = ""))
#> ID rs2288741 rs1821185 rs1432315
#> 1 A TT AC TT
#> 2 B GT CC CT
#> 3 C GG AA CC
#> 4 D TT AC CT
我有一个如下所示的 R 数据框:
rs2288741 rs1821185 rs1432315 ID
T A T A
T C T A
G C C B
T C T B
G A C C
G A C C
T A C D
T C T D
当“ID”等于下一个时,我需要粘贴行值。输出文件应如下所示:
rs2288741 rs1821185 rs1432315 ID
TT AC TT A
GT CC CT B
GG AA CC C
TT AC CT D
有什么简单的方法可以得到这个吗?
data.table
解决方案
setDT(mydata)[, lapply(.SD, paste0, collapse = ""), by = .(ID)]
# ID rs2288741 rs1821185 rs1432315
# 1: A TT AC TT
# 2: B GT CC CT
# 3: C GG AA CC
# 4: D TT AC CT
如果你使用 tidyverse,你可以这样做:
library(tidyverse)
df %>%
group_by(ID) %>%
summarize(across(everything(), ~ paste(.x, collapse = ''))) %>%
select(2:4, 1)
#> # A tibble: 4 x 4
#> rs2288741 rs1821185 rs1432315 ID
#> <chr> <chr> <chr> <chr>
#> 1 TT AC TT A
#> 2 GT CC CT B
#> 3 GG AA CC C
#> 4 TT AC CT D
由 reprex package (v2.0.1)
于 2022-04-11 创建基础 R 版本可以是
aggregate(. ~ ID, data = df, function(x) paste(x, collapse = ""))
#> ID rs2288741 rs1821185 rs1432315
#> 1 A TT AC TT
#> 2 B GT CC CT
#> 3 C GG AA CC
#> 4 D TT AC CT