Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将行内容添加到另一行的列末尾_R_Dataframe - Fatal编程技术网

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函数对我来说很有意义,看起来无法识别字符串模式。