简体   繁体   English

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

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

I have a dataframe like below:我有一个 dataframe 如下所示:

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

Now I want to group these data like below:现在我想将这些数据分组如下:

        T G
sample1 10 3
sample2 4 2

Samples names as row names, mu values as column names and the count values are cell values in the desired dataframe.样本名称作为行名,mu 值作为列名,计数值是所需 dataframe 中的单元格值。

We can use xtabs from base R我们可以使用来自base R xtabs xtabs

xtabs(count ~ sample + mu, df1)

-output -输出

       mu
sample     G  T
  sample1  3 10
  sample2  2  4

Or use tapply或者使用tapply

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

data数据

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

You can use dcast :您可以使用dcast

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

Output: Output:

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

Input:输入:

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