R 将行内容添加到另一行的列末尾
我有以下数据框:R 将行内容添加到另一行的列末尾,r,dataframe,R,Dataframe,我有以下数据框: > df GENE ID EXPR1 EXPR2 ENS127 1122O 1.2 1.2 ENS127 1122O 2.3 1.0 ENS555 33212 4.5 3.9 ENS555 33212 1.2 3.7 ENS941 44444 2.3 3.6 我正在寻找一种方法,将所有具有相似基因的行放在一个行中,这样对于每个唯一的基因,只有一行包
> df
GENE ID EXPR1 EXPR2
ENS127 1122O 1.2 1.2
ENS127 1122O 2.3 1.0
ENS555 33212 4.5 3.9
ENS555 33212 1.2 3.7
ENS941 44444 2.3 3.6
我正在寻找一种方法,将所有具有相似基因的行放在一个行中,这样对于每个唯一的基因,只有一行包含第三列之后的所有值。这将在大数据帧的最后进行迭代。输出如下所示:
> df.output
GENE ID EXPR1 EXPR2 EXPR.01 EXPR.02
ENS127 1122O 1.2 1.2 2.3 1.0
ENS555 33212 4.5 3.9 1.2 3.7
ENS941 44444 2.3 3.6 NA NA
非常感谢您的帮助。您可以获取长格式的数据,以便所有
EXPR
值都在一列中,为每个基因创建一个唯一的列名,然后获取宽格式的数据
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = starts_with('EXPR')) %>%
group_by(GENE, name) %>%
mutate(name = paste(name, row_number(), sep = '_')) %>%
pivot_wider()
# GENE ID EXPR1_1 EXPR2_1 EXPR1_2 EXPR2_2
# <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#1 ENS127 1122O 1.2 1.2 2.3 1
#2 ENS555 33212 4.5 3.9 1.2 3.7
#3 ENS941 44444 2.3 3.6 NA NA
库(dplyr)
图书馆(tidyr)
df%>%
pivot_更长(cols=以('EXPR')开始)%>%
分组依据(基因、名称)%>%
mutate(name=paste(name,row_number(),sep=''.'))%>%
支点()
#基因ID EXPR1 EXPR2 EXPR1 EXPR1 EXPR2 EXPR2
#
#1 ENS127 1122O 1.2 1.2 2.3 1
#2 ENS555 33212 4.5 3.9 1.2 3.7
#3 ENS941 44444 2.3 3.6不适用
数据
df <- structure(list(GENE = c("ENS127", "ENS127", "ENS555", "ENS555",
"ENS941"), ID = c("1122O", "1122O", "33212", "33212", "44444"
), EXPR1 = c(1.2, 2.3, 4.5, 1.2, 2.3), EXPR2 = c(1.2, 1, 3.9,
3.7, 3.6)), class = "data.frame", row.names = c(NA, -5L))
df这是一个数据表
解决方案
library(data.table)
setDT(df)[, rid := rowid(GENE, ID)]
dcast(df, GENE + ID ~ rid, sep = ".", value.var = c("EXPR1", "EXPR2"))
输出
GENE ID EXPR1.1 EXPR1.2 EXPR2.1 EXPR2.2
1: ENS127 1122O 1.2 2.3 1.2 1.0
2: ENS555 33212 4.5 1.2 3.9 3.7
3: ENS941 44444 2.3 NA 3.6 NA
谢谢Ronak。它给出了一个错误,错误:cols
必须至少选择一列,但是,使用start\u with函数对我来说很有意义,看起来无法识别字符串模式。