【问题标题】:Using row variables as columns in R在 R 中使用行变量作为列
【发布时间】:2018-06-13 09:25:40
【问题描述】:

我有以下数据:

split2 <-read.csv("C:\\Users\\Liz\\Desktop\\R text editing\\looped\\splitne.csv")
split2

TYPE VALUE Ne 6 CI95(L) 3 CI95(U) 21 Ne 6 CI95(L) 3 CI95(U) 21 Ne 6 CI95(L) 3 CI95(U) 21 Ne 6 CI95(L) 3 CI95(U) 21

我想使用 R 将其转换为以下格式:

Ne CI95(L) CI95(U) 6 3 21 6 3 21 6 3 21 6 3 21 我试过使用 reshape2 包中的 dcast 函数

dcast(split2, TYPE~VALUE)

但是我最终得到了这个,我不知道如何正确分配 value.var 以正确覆盖:

split2$TYPE 3 6 21 1 CI95(L) 4 0 0 2 CI95(U) 0 0 4 3 Ne 0 4 0

我认为我在转换这个数据集方面很愚蠢,我也尝试过对数据进行子集化和重新组合,但我似乎也无法让它发挥作用。非常感谢任何帮助或大方向的指示!

【问题讨论】:

  • 你可能需要library(data.table); dcast(split2, rowid(TYPE)~TYPE)
  • 你是个明星,谢谢!

标签: r dataframe reshape data-manipulation


【解决方案1】:

我们需要一个序列列。

library(data.table)
dcast(split2, rowid(TYPE)~TYPE) 

【讨论】:

    【解决方案2】:

    尝试一个整洁的解决方案。这假设您的 TYPE 值重复:

    library("tidyverse")
    
    df <- tribble(
      ~TYPE, ~VALUE,
      "Ne" ,     6,
      "CI95(L)", 3,
      "CI95(U)", 21,
      "Ne"   ,   6,
      "CI95(L)", 3,
      "CI95(U)" ,21,
      "Ne" ,     6,
      "CI95(L)" ,3,
      "CI95(U)", 21,
      "Ne"    ,  6,
      "CI95(L)", 3,
      "CI95(U)", 21
    )
    
    df %>% 
      dplyr::mutate(id = cumsum(TYPE=="Ne")) %>%
      tidyr::spread(TYPE,VALUE) %>% 
      dplyr::select(Ne, `CI95(L)`,`CI95(U)`)
    
    # A tibble: 4 x 3
    # Ne `CI95(L)` `CI95(U)`
    # * <dbl>     <dbl>     <dbl>
    # 1     6         3        21
    # 2     6         3        21
    # 3     6         3        21
    # 4     6         3        21
    

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 2021-05-27
      • 2021-10-26
      • 2013-09-08
      相关资源
      最近更新 更多