2017-11-10 8 views
1

に従って被験者固有グループ化されたデータを減算Iは、以下のデータを有する:妊娠(1、2または3)の
PseudoID = ID、Trim_SSW =トリメスター、重量 =主題を時点SSWと各IDについてはSSW =妊娠週カテゴリ変数

structure(list(PseudoID = c(1001L, 1001L, 1001L, 1001L, 1001L, 
1001L, 1001L, 1001L, 1001L, 1001L, 1001L, 1001L, 1001L, 1002L, 
1002L, 1002L, 1002L, 1002L, 1002L, 1002L), Trim_SSW = c("T1", 
"T1", "T2", "T2", "T2", "T3", "T3", "T3", "T3", "T3", "T3", "T3", 
"T3", "T1", "T1", "T1", "T2", "T2", "T2", "T3"), weight = c(120.8, 
120.9, 120.8, 122.2, 122.5, 125, 124.6, 126.6, 126.4, 126.7, 
126.7, 128, 129.3, 101.7, 100.5, 100.2, 101.7, 104.2, 104.2, 
105.6), SSW = c(8L, 12L, 15L, 19L, 23L, 27L, 30L, 33L, 35L, 36L, 
37L, 38L, 39L, 9L, 10L, 13L, 18L, 22L, 25L, 29L)), .Names = c("PseudoID", 
"Trim_SSW", "weight", "SSW"), row.names = c(4L, 5L, 15L, 12L, 
17L, 16L, 11L, 6L, 3L, 1L, 2L, 18L, 20L, 46L, 47L, 49L, 42L, 
43L, 48L, 31L), class = "data.frame") 

の重量は、私は、各妊娠初期の体重増加を見てみたいです。したがって、最後の測定とT1、T2およびT3の最初の測定との差を個別に見つける必要があります。トリメスターで測定できるのは1つだけですが、NAを入力します。私は、3つの新しい変数(T1gain、T2gain、T3gain)を作ることでさらに計算が簡単になると思います。

私はここに同様の投稿を見ましたが、私の質問に完全に答えなかったので、私は新しい投稿をするように求められました。

+0

明確ではないが、変数のクラスタイプを変更することを確認してください。 ID、トリムスター、T1gain、T2gain、T3gainの列を持つ新しいデータフレームですか?または、元のデータフレームに利得情報を追加しますか? – AntoniosK

+0

@AntoniosKはい、列、ID、トリメスター、T1gain、T2gain、T3gainを持つ新しいデータフレーム –

答えて

0
library(dplyr) 
library(tidyr) 

structure(list(PseudoID = c(1001L, 1001L, 1001L, 1001L, 1001L, 
1001L, 1001L, 1001L, 1001L, 1001L, 1001L, 1001L, 1001L, 1002L, 
1002L, 1002L, 1002L, 1002L, 1002L, 1002L), Trim_SSW = c("T1", 
"T1", "T2", "T2", "T2", "T3", "T3", "T3", "T3", "T3", "T3", "T3", 
"T3", "T1", "T1", "T1", "T2", "T2", "T2", "T3"), weight = c(120.8, 
120.9, 120.8, 122.2, 122.5, 125, 124.6, 126.6, 126.4, 126.7, 
126.7, 128, 129.3, 101.7, 100.5, 100.2, 101.7, 104.2, 104.2, 
105.6), SSW = c(8L, 12L, 15L, 19L, 23L, 27L, 30L, 33L, 35L, 36L, 
37L, 38L, 39L, 9L, 10L, 13L, 18L, 22L, 25L, 29L)), .Names = c("PseudoID", 
"Trim_SSW", "weight", "SSW"), row.names = c(4L, 5L, 15L, 12L, 
17L, 16L, 11L, 6L, 3L, 1L, 2L, 18L, 20L, 46L, 47L, 49L, 42L, 
43L, 48L, 31L), class = "data.frame") -> dt 

dt %>% 
    group_by(PseudoID, Trim_SSW) %>%          # for each ID and trimester 
    summarise(Weight_gain = weight[length(weight)] - weight[1],   # get last - first weights 
      NumRows = n(),            # count number of rows/observations 
      Weight_gain = ifelse(NumRows == 1, NA, Weight_gain)) %>%  # flag with NA if there's only 1 row 
    select(-NumRows) %>%             # remove unecessary column 
    mutate(Trim_SSW = paste0(Trim_SSW, "_gain")) %>%      # change the names 
    ungroup() %>%               # forget the grouping 
    spread(Trim_SSW, Weight_gain)           # reshape 

# # A tibble: 2 x 4 
# PseudoID T1_gain T2_gain T3_gain 
# * <int> <dbl> <dbl> <dbl> 
# 1  1001  0.1  1.7  4.3 
# 2  1002 -1.5  2.5  NA 
1

お試しください!私はdplyrdata.tableを使用しています。どちらも強力なパッケージです。あなたが望む正確な出力がわからないので、bcという2つの出力を比較してどちらが必要なのかを調べることができます。あなたがbを好む場合はもちろん

# doing the calculations                                                                   17L, 16L, 11L, 6L, 3L, 1L, 2L, 18L, 20L, 46L, 47L, 49L, 42L, 
library(dplyr)                                                                  43L, 48L, 31L), class = "data.frame") 
b <- a %>% 
    group_by(PseudoID, Trim_SSW) %>% 
    summarize(gain = last(weight) - first(weight)) 

# reshaping data from long to wide format 
library(data.table) 
c <- setDT(b) 
c <- dcast(c, PseudoID ~ Trim_SSW, value.var = "gain") 

# rename column names 
names(c)[2:4] <- c("T1_gain", "T2_gain", "T3_gain") 


# comparing the two outputs 
> b 
# A tibble: 6 x 3 
# Groups: PseudoID [?] 
    PseudoID Trim_SSW gain 
    <int> <chr> <dbl> 
1  1001  T1 0.1 
2  1001  T2 1.7 
3  1001  T3 4.3 
4  1002  T1 -1.5 
5  1002  T2 2.5 
6  1002  T3 0.0 

> c 
    PseudoID T1_gain T2_gain T3_gain 
1:  1001  0.1  1.7  4.3 
2:  1002 -1.5  2.5  0.0 

、あなたはそれに応じて出力がどうあるべきか(その順序で要素、要因、数値、)

関連する問題