在R中使用行变量作为列

问题描述 投票:1回答:2

我有以下数据:

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

我认为我对这个数据集在转换方面很愚蠢,我也尝试过对数据进行子集化和重组,但是我似乎也无法使用它。任何帮助,或总体方向的指针非常赞赏!

r dataframe reshape data-manipulation
2个回答
1
投票

我们需要一个序列列。

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

0
投票

尝试一个整洁的解决方案。这假设您的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
© www.soinside.com 2019 - 2024. All rights reserved.