簡體   English   中英

嘗試在 R 中重新排列表格。(我是初學者!)是否有某種“轉置”功能?

[英]Trying to rearrange a table in R. (I'm a beginner!) is there some sort of 'transpose' function?

我正在嘗試重新排列 R 中的表格。

我有(例如)52 只獅子。 對每頭獅子在 4 個時間點采集的血液樣本中的 92 種不同標記物進行了測量。 目前,我有一列獅子 ID,長 208 行,因為它排列在“樣本編號”列旁邊,該列表示它被拍攝的時間點,時間 1、2、3、4。 然后是來自 92 種不同標記的血液樣本的值。 所以總共 94 列(ID、樣品編號和標記類型)。

查看數據:

'ID' 'Sample Number' 'Marker type'
-Lion 1 time 1 Marker 1 Marker 2 Marker 3...Marker 92 
-Lion 1 time 2 Marker 1 Marker 2 Marker 3...Marker 92
-Lion 1 time 3 Marker 1 Marker 2 Marker 3...Marker 92
-Lion 1 time 4 Marker 1 Marker 2 Marker 3...Marker 92
-Lion 2 time 1 Marker 1 Marker 2 Marker 3...Marker 92
-Lion 2 time 2 Marker 1 Marker 2 Marker 3...Marker 92
-Lion 2 time 3 Marker 1 Marker 2 Marker 3...Marker 92
-Lion 2 time 4 Marker 1 Marker 2 Marker 3...Marker 92
-Lion 3 time 1 Marker 1 Marker 2 Marker 3...Marker 92
-Lion 3 time 2 Marker 1 Marker 2 Marker 3...Marker 92
-Lion 3 time 3 Marker 1 Marker 2 Marker 3...Marker 92
-Lion 3 time 4 Marker 1 Marker 2 Marker 3...Marker 92

我需要更改它,以便它為我提供一列用於 52 個獅子 ID(而不是每只獅子 4 行),然后為每個 92 個標記提供 4 列用於樣本編號,總共提供 369 列。

預期輸出數據:

'ID' 'Sample Number' 'Marker type'    
 lion 1 time 1 marker 1 time 2 marker 1 time 3 marker 1 time 4 marker 1
 lion 2 time 1 marker 2 time 2 marker 2 time 3 marker 2 time 4 marker 2
 lion 3 time 1 marker 3 time 2 marker 3 time 3 marker 3 time 4 marker 3

我不是特別想創建一個新的時間變量 1 標記 1,而是標記 1 的一列,分成 4 列時間,1 行獅子。 標記 2 等也是如此。

我認為我們可以在這里使用pivot_wider

tidyr::pivot_wider(df, names_from = Samp_Num, values_from = Mark1:Mark3))
#OR
#tidyr::pivot_wider(df, names_from = Samp_Num, values_from = starts_with("Mark"))

# A tibble: 3 x 13
#  ID    Mark1_time1 Mark1_time2 Mark1_time3 Mark1_time4 Mark2_time1 Mark2_time2
#  <fct> <fct>       <fct>       <fct>       <fct>       <fct>       <fct>      
#1 Lion1 Marker1     Marker1     Marker1     Marker1     Marker2     Marker2    
#2 Lion2 Marker1     Marker1     Marker1     Marker1     Marker2     Marker2    
#3 Lion3 Marker1     Marker1     Marker1     Marker1     Marker2     Marker2    
# … with 6 more variables: Mark2_time3 <fct>, Mark2_time4 <fct>,
#   Mark3_time1 <fct>, Mark3_time2 <fct>, Mark3_time3 <fct>, Mark3_time4 <fct>

在我的示例數據中,我們有 3 個標記列,現在最終輸出中有 13 列(每次 3 * 4 + 1)。 同樣,對於您的實際數據,您應該有 369 列 (92 * 4 + 1)。

數據

創建了一個小樣本數據

df <- structure(list(ID = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
3L, 3L, 3L, 3L), .Label = c("Lion1", "Lion2", "Lion3"), class = "factor"), 
Samp_Num = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 
2L, 3L, 4L), .Label = c("time1", "time2", "time3", "time4"
), class = "factor"), Mark1 = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "Marker1", class = "factor"), 
Mark2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), .Label = "Marker2", class = "factor"), Mark3 = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "Marker3", class = "factor")),
class = "data.frame", row.names = c(NA, -12L))

暫無
暫無

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

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