首页 > 解决方案 > 数据框中从长格式到宽格式

问题描述

我想更改数据框的格式。现在它是长格式,但我想将其更改为宽格式,以便每个sample 都有自己的列,根据cond. 现在应该给1,缺席0。

In:

   virus sample    cond
1 virusA      A Present
2 virusB      A Present
3 virusC      A  Absent
4 virusA      B  Absent
5 virusB      B Present
6 virusC      B Present

df <-     structure(list(virus = c("virusA", "virusB", "virusC", "virusA", 
"virusB", "virusC"), sample = c("A", "A", "A", "B", "B", "B"), 
    cond = c("Present", "Present", "Absent", "Absent", "Present", 
    "Present")), class = "data.frame", row.names = c(NA, -6L))

Out:

    > df.out
       virus A B
    1 virusA 1 0
    2 virusB 1 1
    3 virusC 0 1

标签: r

解决方案


pivot_wider与_values_fn

library(tidyr)
pivot_wider(df, names_from = sample, values_from = cond,
      values_fn = list(cond = ~ sum(. == 'Present')))

-输出

# A tibble: 3 × 3
  virus      A     B
  <chr>  <int> <int>
1 virusA     1     0
2 virusB     1     1
3 virusC     0     1

推荐阅读