r - 尝试在 R 中重新排列表格。(我是初学者!)是否有某种“转置”功能?
问题描述
我正在尝试重新排列 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))
推荐阅读
- elasticsearch - 使用 Logstash 将 json 字符串注入不同的 Elasticsearch 索引
- typescript - `{}` 在功能上是否等同于 `not null & not undefined`?
- spring - 嵌套异常是 java.io.FileNotFoundException: 无法打开 ServletContext 资源 [/WEB-INF/test-servlet.xml]
- statistics - 电梯安全到达地面的概率
- json - 如何从json文件中检索字段
- database - 具有排他锁性能问题的 Postgres 选择查询
- javascript - 如何从 javascript 中具有重复属性的 HTML 文档中获取数组?
- django - 与鹡鸰标签相关的附加字段?
- iot - 逻辑转换器必须与面包板一起使用吗?
- python - 函数调用之间的递归函数中的持久参数