我有以下数据:
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)
尝试一个整洁的解决方案。这假设您的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