列出数据框中每一列的多个级别

时间:2018-11-22 13:21:41

标签: r

> head(Gene)
  Key Func.ensGene Func.genericGene Func.refGene
1   1   intergenic       intergenic   intergenic
2   2   intergenic       intergenic   intergenic
3   3   intergenic       intergenic     intronic
4   4       exonic           exonic       exonic
5   5   intergenic       intergenic     intronic
6   6   intergenic       intergenic     intronic

必需的输出:

Type          Func.ensGene Func.genericGene Func.refGene
exonic             1              1                1
intergenic         5              5                2
intronic           0              0                3

我尝试的解决方案仅适用于一列:

unique(Gene["Func.ensGene"])

我能否获得如上所示的输出表并获得条形图 X轴的“类型”在哪里,条形图代表每列的计数?

3 个答案:

答案 0 :(得分:1)

我们可以从数据框中获取所有unique级别,并针对每一列通过首先将其转换为具有先前计算的唯一级别的factor来计算每个级别的计数。

unique_names <- unique(unlist(df[-1]))
sapply(df[-1], function(x) table(factor(x, levels = unique_names)))

#           Func.ensGene Func.genericGene Func.refGene
#intergenic            5                5            2
#exonic                1                1            1
#intronic              0                0            3

答案 1 :(得分:1)

只需将?xtabs?stack一起使用:

xtabs( ~ values + ind , stack(df1[,-1]))

或更短,如@nicola所建议的:

table(stack(df1[,-1]))

你们俩都得到:

#            ind
#values       Func.ensGene Func.genericGene Func.refGene
#  exonic                1                1            1
#  intergenic            5                5            2
#  intronic              0                0            3

您是否希望进一步处理data.frame?

as.data.frame.matrix(
    xtabs( ~ values + ind , stack(df1[,-1]))  # or again only table(stack(df1[,-1]))
)

答案 2 :(得分:0)

喜欢基本的R解决方案,但是使用cat genesis.json.src | jq --arg pub_key $PK --arg name node$i --arg addr $ADDR '.validators+= [{address: $addr, pub_key: $pub_key, power:"10",name:$name}]' > genesis.json.dest 和一些data.table可以提高可读性,您可以直接获取data.frame(而不是表):

magrittr

或更简洁(如Henrik所建议):

library(magrittr)
library(data.table)
setDT(df)
df %>%
  melt(id.vars = "Key") %>%
  .[, .N, .(variable, value)] %>% 
  dcast(value ~ variable, value.var = "N", fill = 0)

        value Func.ensGene Func.genericGene Func.refGene
1:     exonic            1                1            1
2: intergenic            5                5            2
3:   intronic            0                0            3

如果您喜欢tidyverse函数:

dcast(melt(df, "Key"), value ~ variable)

数据:

library(tidyr)
df %>%
  gather(key = Key) %>%
  group_by(Key, value) %>%
  count() %>%
  spread(Key, n, fill = 0)

# A tibble: 3 x 4
# Groups:   value [3]
  value      Func.ensGene Func.genericGene Func.refGene
  <chr>             <dbl>            <dbl>        <dbl>
1 exonic                1                1            1
2 intergenic            5                5            2
3 intronic              0                0            3