Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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,我有一个像这样的数据框 > head(zeisel) gene_name ClusterName p 1 GNAI3 ABC 0.29914 2 GNAI3 ACBG 0.33417 3 GNAI3 ACMB 0.21984 4 GNAI3 ACNT1 0.14727 5 GNAI3 ACNT2 0.22205 6 GNAI3 ACOB 0.1

我有一个像这样的数据框

 > head(zeisel)
  gene_name ClusterName       p
1     GNAI3         ABC 0.29914
2     GNAI3        ACBG 0.33417
3     GNAI3        ACMB 0.21984
4     GNAI3       ACNT1 0.14727
5     GNAI3       ACNT2 0.22205
6     GNAI3        ACOB 0.16913
我想将其转换为:

有办法做到这一点吗?我尝试先设置名称,但这将意味着迭代地遍历每一行

例如:

#get name of new df
cells <- as.data.frame(table(df$ClusterName))

#now create an empty dataframe. 
unmelted_df <- setNames(data.frame(matrix(ncol = length(cells$Var1), nrow = 0)), as.character(cells$Var1))
#获取新df的名称

单元格一个选项是创建序列列,然后
扩展成“宽”格式

library(tidyverse)
zeisel %>%
    mutate(rn = 1) %>%
    spread(ClusterName, p)
#  gene_name rn     ABC    ACBG    ACMB   ACNT1   ACNT2    ACOB
#1     GNAI3  1 0.29914 0.33417 0.21984 0.14727 0.22205 0.16913

从较新版本的
tidyr
spread
将被弃用,并且可以使用在位的
pivot\u wide

zeisel %>% 
    pivot_wider(names_from = 'ClusterName', values_from = 'p')
# A tibble: 1 x 7
#  gene_name   ABC  ACBG  ACMB ACNT1 ACNT2  ACOB
#  <chr>     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 GNAI3     0.299 0.334 0.220 0.147 0.222 0.169
数据
zeisel Try
tidyr::spread(df,ClusterName,p)
?为什么要使用
mutate(rn=1)
?@Workhorse不需要它,但我认为首先您可能需要一个唯一的标识符来声明它是第一行(因为您只提供了数据集的头部)
library(data.table)
dcast(setDT(zeisel), gene_name ~ ClusterName, value.var = 'p')
#   gene_name     ABC    ACBG    ACMB   ACNT1   ACNT2    ACOB  
#1:     GNAI3 0.29914 0.33417 0.21984 0.14727 0.22205 0.16913
zeisel <- structure(list(gene_name = c("GNAI3", "GNAI3", "GNAI3", "GNAI3", 
"GNAI3", "GNAI3"), ClusterName = c("ABC", "ACBG", "ACMB", "ACNT1", 
"ACNT2", "ACOB"), p = c(0.29914, 0.33417, 0.21984, 0.14727, 0.22205, 
0.16913)), class = "data.frame", row.names = c(NA, -6L))