簡體   English   中英

在R中轉置並創建分類值

[英]Transpose and create categorical values in R

我有一個具有以下結構的數據框,我希望從中將變量轉置為類別。 目的是找到變量的加權混合。

       data <- read.table(header=T, text='
              subject weight sex  test 
              1       2      M     control 
              2       3      F     cond1  
              3       2      F     cond2  
              4       4      M    control
              5       3      F    control
              6       2      F    control
               ')

      data

預期產量:

          subject weight control_F control_M cond1_F cond1_M cond2_F cond2_M
           1       2        0        1          0      0      0        0
           2       3        0        0          1      0      0        0
           3       2        0        0          0      0      1        0
           4       4        0        1          0      0      0        0
           5       3        1        0          0      0      0        0
           6       2        1        0          0      0      0        0

我嘗試使用ifelse和cut的組合,但無法產生輸出。

關於如何執行此操作的任何想法?

TIA

您可以使用

model.matrix(~ subject + weight + sex:test - 1, data)

我認為model.matrix在這里是最自然的(請參閱@Julius的答案),但這是另一種選擇:

library(data.table)
setDT(data)

dcast(data, subject+weight~test+sex, fun=length, drop=c(TRUE,FALSE))


   subject weight cond1_F cond1_M cond2_F cond2_M control_F control_M
1:       1      2       0       0       0       0         0         1
2:       2      3       1       0       0       0         0         0
3:       3      2       0       0       1       0         0         0
4:       4      4       0       0       0       0         0         1
5:       5      3       0       0       0       0         1         0
6:       6      2       0       0       0       0         1         0

要以“正確”順序獲得列(首先使用控件),請在投射前設置因子水平:

data[, test := relevel(test, "control")]
dcast(data, subject+weight~test+sex, fun=length, drop=c(TRUE,FALSE))


   subject weight control_F control_M cond1_F cond1_M cond2_F cond2_M
1:       1      2         0         1       0       0       0       0
2:       2      3         0         0       1       0       0       0
3:       3      2         0         0       0       0       1       0
4:       4      4         0         1       0       0       0       0
5:       5      3         1         0       0       0       0       0
6:       6      2         1         0       0       0       0       0

(注意:reshape2的dcast在這里不太好,因為它的drop選項適用於行和列。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM