尝试重新排列R中的表格(我是初学者!)是否存在某种形式的';转置';功能?

尝试重新排列R中的表格(我是初学者!)是否存在某种形式的';转置';功能?,r,R,我正试图重新安排R区的一张桌子 例如,我有52只狮子。每头狮子在4个时间点采集的血液样本上测量92种不同的标记物。目前,我有一个lion ID列,它有208行长,因为它被安排在“sample number”列旁边,该列表示它所采取的时间点,时间1,2,3,4。然后是来自92个不同标记的血样值。总共94列(ID、样本号和标记类型) 见数据: 'ID' 'Sample Number' 'Marker type' -Lion 1 time 1 Marker 1 Marker 2 Marker 3...

我正试图重新安排R区的一张桌子

例如,我有52只狮子。每头狮子在4个时间点采集的血液样本上测量92种不同的标记物。目前,我有一个lion ID列,它有208行长,因为它被安排在“sample number”列旁边,该列表示它所采取的时间点,时间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个lion 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 marker 1创建一个新变量,而是为marker 1创建一个列,将其拆分为4列时间,并为lion创建一行。标记2也是如此,依此类推

我想我们可以在这里更广泛地使用
pivot\u

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>
tidyr::pivot\u wide(df,name\u from=Samp\u Num,value\u from=Mark1:Mark3))
#或
#tidyr::pivot\u wide(df,name\u from=Samp\u Num,values\u from=start\u with(“Mark”))
#一个tibble:3x13
#ID Mark1\u time1 Mark1\u time2 Mark1\u time3 Mark1\u time4 Mark2\u time1 Mark2\u time2
#                                            
#1个狮子标记1个标记1个标记1个标记1个标记2个标记2
#2个标记1个标记1个标记1个标记1个标记2个标记2
#3狮子标记1标记1标记1标记2标记2标记
#…还有6个变量:Mark2_time3,Mark2_time4,
#Mark3_time1,Mark3_time2,Mark3_time3,Mark3_time4
在我的示例数据中,我们有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))

df这是一个
矩阵
还是一个
数据帧
?也许您可以提供一个实际的(更小的)示例数据集?我建议像2-3只狮子,每只3次,有4个标记,每个标记使用不同的值;一个通用的解决方案将使用4个和400个标记,同样容易。类似地,在给定输入的情况下,将其(手动,必要时使用excel)转换为预期输出。然后以编程方式(
data.frame
)或使用
dput(x)
将其包含在问题中。