繁体   English   中英

根据列值分组,然后将该组作为一行添加到 r 中的 dataframe

[英]Group by based on a column value and then add the group as a row to a dataframe in r

我有一个 dataframe 如下所示:

sample mu count
sample1 T 10
sample1 G 3
sample2 T 4
sample2 G 2

现在我想将这些数据分组如下:

        T G
sample1 10 3
sample2 4 2

样本名称作为行名,mu 值作为列名,计数值是所需 dataframe 中的单元格值。

我们可以使用来自base R xtabs xtabs

xtabs(count ~ sample + mu, df1)

-输出

       mu
sample     G  T
  sample1  3 10
  sample2  2  4

或者使用tapply

with(df1, tapply(count, list(sample, mu), I))
        G  T
sample1 3 10
sample2 2  4

数据

df1 <- structure(list(sample = c("sample1", "sample1", "sample2", "sample2"
), mu = c("T", "G", "T", "G"), count = c(10L, 3L, 4L, 2L)), 
class = "data.frame", row.names = c(NA, 
-4L))
library(tidyverse)

df <- read_table("sample mu count
sample1 T 10
sample1 G 3
sample2 T 4
sample2 G 2")

df %>%  
  pivot_wider(names_from = mu, 
              values_from = count)

# A tibble: 2 x 3
  sample      T     G
  <chr>   <dbl> <dbl>
1 sample1    10     3
2 sample2     4     2

您可以使用dcast

library(data.table)
dcast(setDT(df),sample~mu,value.var="count")

Output:

    sample     G     T
    <char> <int> <int>
1: sample1     3    10
2: sample2     2     4

输入:

df = structure(list(sample = c("sample1", "sample1", "sample2", "sample2"
), mu = c("T", "G", "T", "G"), count = c(10L, 3L, 4L, 2L)), row.names = c(NA, 
-4L), class = "data.frame")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM