Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.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将2列数据帧转换为矩阵_R_Unix_Matrix - Fatal编程技术网

通过切片行名-R将2列数据帧转换为矩阵

通过切片行名-R将2列数据帧转换为矩阵,r,unix,matrix,R,Unix,Matrix,我在R中有两个数据帧,我想把它们转换成一个矩阵。下面是我的示例数据 data.framedat包含两列,一列包含名称,第二列包含一些分数 > head(dat, n=20) V1 V2 1 4star_Active_TSS 10.99561503 2

我在R中有两个数据帧,我想把它们转换成一个矩阵。下面是我的示例数据

data.frame
dat
包含两列,一列包含名称,第二列包含一些分数

> head(dat, n=20)
                                                     V1           V2
1                                      4star_Active_TSS  10.99561503
2                               4star_Bivalent_Enhancer   0.42425920
3                             4star_Bivalent_Poised_TSS   0.31163730
4                                       4star_Enhancers 139.64713405
5                             4star_Flanking_Active_TSS  23.11961717
6                       4star_Flanking_Bivalent_TSS_Enh   0.17654506
7                                 4star_Genic_enhancers  44.42394542
8                                 4star_Heterochromatin -34.61099049
9                                   4star_Quiescent_Low -28.54240987
10                             4star_Repressed_PolyComb  -0.42096698
11                           4star_Strong_transcription  12.70895605
12                        4star_Transcr_at_gene_5_and_3   0.00000000
13                        4star_Weak_Repressed_PolyComb   0.08902141
14                             4star_Weak_transcription  19.28859369
15                          4star_ZNF_genes_and_repeats  -1.58340662
16          A549_EtOH_0.02pct_Lung_Carcinoma_Active_TSS  14.01552989
17   A549_EtOH_0.02pct_Lung_Carcinoma_Bivalent_Enhancer   1.00466761
18 A549_EtOH_0.02pct_Lung_Carcinoma_Bivalent_Poised_TSS   1.20607773
19           A549_EtOH_0.02pct_Lung_Carcinoma_Enhancers  63.36004048
20 A549_EtOH_0.02pct_Lung_Carcinoma_Flanking_Active_TSS  48.27400816
另一个数据框有一列,包含
行的一半名称。上述数据框的名称

> states=read.delim("states.txt", header=FALSE)
> states
                          V1
1                 Active_TSS
2          Bivalent_Enhancer
3        Bivalent_Poised_TSS
4                  Enhancers
5        Flanking_Active_TSS
6  Flanking_Bivalent_TSS_Enh
7            Genic_enhancers
8            Heterochromatin
9              Quiescent_Low
10        Repressed_PolyComb
11      Strong_transcription
12   Transcr_at_gene_5_and_3
13   Weak_Repressed_PolyComb
14        Weak_transcription
15     ZNF_genes_and_repeats
我希望生成的矩阵/data.frame如下所示。我想把第一个data.frame的第一列和第二个data.frame的列切掉,然后创建一个如下所示的矩阵

>dd_matrix
                                 Active_TSS Bivalent_Enhancer
4star                              10.99562         0.4242592
A549_EtOH_0.02pct_Lung_Carcinoma   14.01553         1.0046676
                                 Bivalent_Poised_TSS Enhancers
4star                                      0.3116373 139.64713
A549_EtOH_0.02pct_Lung_Carcinoma           1.2060777  63.36004
                                 Flanking_Active_TSS Flanking_Bivalent_TSS_Enh
4star                                       23.11962                 0.1765451
A549_EtOH_0.02pct_Lung_Carcinoma            48.27401                 1.1449923
                                 Genic_enhancers Heterochromatin Quiescent_Low
4star                                  44.423945      -34.610990     -28.54241
A549_EtOH_0.02pct_Lung_Carcinoma        5.976754       -1.274768     -31.68228
                                 Repressed_PolyComb Strong_transcription
4star                                     -0.420967            12.708956
A549_EtOH_0.02pct_Lung_Carcinoma          -0.331186             3.375022
                                 Transcr_at_gene_5_and_3
4star                                           0.000000
A549_EtOH_0.02pct_Lung_Carcinoma                1.501412
                                 Weak_Repressed_PolyComb Weak_transcription
4star                                         0.08902141           19.28859
A549_EtOH_0.02pct_Lung_Carcinoma             -0.05151471           11.19855
                                 ZNF_genes_and_repeats
4star                                        -1.583407
A549_EtOH_0.02pct_Lung_Carcinoma              0.000000
任何帮助都将不胜感激。任何
R
unix
解决方案都可以工作


谢谢。

这里有一个使用
dplyr
/
tidyr
的解决方案:

require(tidyverse);
df %>%
    separate(V1, into = c("what","states"), "_", extra = "merge") %>%
    spread(states, V2) %>%
    column_to_rownames("what");
#      Active_TSS Bivalent_Enhancer Bivalent_Poised_TSS Enhancers
#4star   10.99562         0.4242592           0.3116373  139.6471
#A549          NA                NA                  NA        NA
#      EtOH_0.02pct_Lung_Carcinoma_Active_TSS
#4star                                     NA
#A549                                14.01553
#      EtOH_0.02pct_Lung_Carcinoma_Bivalent_Enhancer
#4star                                            NA
#A549                                       1.004668
#      EtOH_0.02pct_Lung_Carcinoma_Bivalent_Poised_TSS
#4star                                              NA
#A549                                         1.206078
#      EtOH_0.02pct_Lung_Carcinoma_Enhancers
#4star                                    NA
#A549                               63.36004
#      EtOH_0.02pct_Lung_Carcinoma_Flanking_Active_TSS Flanking_Active_TSS
#4star                                              NA            23.11962
#A549                                         48.27401                  NA
#      Flanking_Bivalent_TSS_Enh Genic_enhancers Heterochromatin Quiescent_Low
#4star                 0.1765451        44.42395       -34.61099     -28.54241
#A549                         NA              NA              NA            NA
#      Repressed_PolyComb Strong_transcription Transcr_at_gene_5_and_3
#4star          -0.420967             12.70896                       0
#A549                  NA                   NA                      NA
#      Weak_Repressed_PolyComb Weak_transcription ZNF_genes_and_repeats
#4star              0.08902141           19.28859             -1.583407
#A549                       NA                 NA                    NA
说明:通过在第一个
“quot
上拆分,将
V1
分为两列;然后将
states
用作键,将
V2
用作值,将
what
列转换为行名称,将
扩展为宽格式


样本数据
df棘手的事情似乎是,状态和前缀之间没有分隔符,一些状态是其他状态的一部分。不管怎样,这就是我想到的:

library(tidyverse)
dat  %>%
  rowwise() %>%
  mutate(postfix = max(states$V1[str_detect(V1, states$V1)])) %>%
  mutate(prefix = str_replace(V1, str_c("_", postfix), "")) %>%
  melt(id.vars = c("postfix", "prefix"), measure.vars = "V2") %>%
  dcast(prefix ~ postfix) 

在第一个
mutate
中,识别最长的匹配状态以形成
后缀。在第二个
mutate
中,删除该
后缀
以形成
前缀

你好,毛里塔尼亚,非常感谢。我稍微修改了输入
df
。是否有一种方法可以根据上次出现的
\uu
拆分
V1
?我检查了
separate
函数,但我在理解上没有什么问题。更新:我编写了一个shell脚本,只保留了一个
。现在它工作得很好。非常感谢。@cat只是想澄清一下:在我的解决方案中,
separate
拆分
上的术语,将第一个术语存储在
what
列中,并将剩余的合并术语存储在
states
列中。如果
什么
总是以第一个下划线与
状态
分开,则此解决方案将有效。@cat PS。您可以通过在解决方案旁边设置勾号来关闭问题并接受最能回答您问题的解决方案。我已相应地进行了修改。现在我可以根据需要得到输出。谢谢
library(tidyverse)
dat  %>%
  rowwise() %>%
  mutate(postfix = max(states$V1[str_detect(V1, states$V1)])) %>%
  mutate(prefix = str_replace(V1, str_c("_", postfix), "")) %>%
  melt(id.vars = c("postfix", "prefix"), measure.vars = "V2") %>%
  dcast(prefix ~ postfix)