r - 将数据帧从一个转换为另一个

标签 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.16913

我想把它转换成这样:

enter image description here

有没有办法做到这一点?我尝试先设置名称,但这意味着对每一行进行迭代 rbinding。

例如:

#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))

对于海量数据框,有没有办法一步完成?

最佳答案

一个选项是创建序列列,然后传播成“宽”格式

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_wider

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

或者使用 data.table 中的 dcast

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))

关于r - 将数据帧从一个转换为另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045225/

相关文章:

r - 如何提取表中的参数模型?

r - 分组并按 Pandas 中的最大值过滤

r - R中动物园对象的分位数和聚合

python - Pandas 的数据框(Python)是否更接近 R 的数据框或数据表?

python - 如何在 pandas 中将 n*m DataFrame 与 1*m DataFrame 相乘?

r - 在点图上画圆圈以标记 ggplot2 中的最佳区域

r - knitr_child 升级到 R 3.0 后抛出错误

python - 在连续的绘图命令期间关闭自动颜色循环

python - 以多 header pandas 数据框为条件

python - 使用 pandas 计算下一行的值作为前一行的函数