R: Типичная строка для каждой пары сравнения

Я сам кодировал форму для многомерного объекта JavaScript, чтобы использовать его в процессе производства. Результатом является https://github.com/serbanghita/formToObject.js .

0
задан jackonator 13 July 2018 в 19:40
поделиться

2 ответа

Опция заключается в использовании grouped измерительных переменных data.table::melt как:

library(data.table)


melt(setDT(x), id=1:2, measure=list(c("t2","t3"), c("y2","y3"), c("se2","se3")), 
                                  value.name=c("t2", "y2", "se2"))

#Or in short form
melt(setDT(x), id=1:2, measure=patterns("^t[2-3]", "^y", "^se"),
                       value.name=c("t2", "y2", "se2"))
#        id t1 variable t2  y2 se2
# 1: Study1  1        1  2 0.1 0.5
# 2: Study1  1        2  3 0.2 0.7
0
ответ дан MKR 17 August 2018 в 12:11
поделиться

Вы можете использовать reshape

n=length(grep("y",names(x)))
reshape(x,t(matrix(3:ncol(x),n)),idvar="id",dir="long")  
             id t1 time t2  y2 se2
Study1.1 Study1  1    1  2 0.1 0.5
Study1.2 Study1  1    2  3 0.2 0.7  

, или вы можете использовать:

library(data.table)
cbind(melt(setDT(x),"id",data.frame(matrix(3:ncol(x),2)),t1=x$t1)
           id variable value1 value2 value3 t1
    1: Study1        1      2    0.1    0.5  1
    2: Study1        2      3    0.2    0.7  1   


reshape(x,data.frame(matrix(3:ncol(x),2)),idvar="id",dir="long")
          id t1 time t2  y2 se2
    1 Study1  1    1  2 0.1 0.5
    2 Study1  1    2  3 0.2 0.7
1
ответ дан Onyambu 17 August 2018 в 12:11
поделиться
  • 1
    Спасибо, но это не сработает для чего-то вроде: x = data.frame (id = «Study1», t1 = 1, t2 = 2, t3 = 3, t4 = 4, y2 = 0,1, y3 = 0,2, y4 = 0,3, se2 = 0,5, se3 = 0,7, se4 = 0,9) – jackonator 13 July 2018 в 20:31
  • 2
    @jackonator В этом случае, какой результат вы ожидаете? Вы должны изменить данные. Вот и все. в этом случае вам нужно иметь способ узнать, как изменить форму – Onyambu 13 July 2018 в 20:34
  • 3
    В этом случае я ожидал бы: y = data.frame (id = c («Study1», «Study1», «Study1»), t1 = c (1,1,1), t2 = c (2, 3,4), y2 = c (0,1,0,2,0,3), se2 = c (0,5,0,7,0,9)) – jackonator 13 July 2018 в 20:40
  • 4
    в этом случае вы будете включать n=length(grep("y",names(x))); reshape(x,t(matrix(3:ncol(x),n)),idvar="id",dir="long"), где есть 2 в приведенном выше при использовании reshape заменить на n, и он будет работать – Onyambu 13 July 2018 в 20:44
Другие вопросы по тегам:

Похожие вопросы: