我正在处理一个大型数据集,其中包含奶牛运动(坐标)的信息,我已将其分成一个列表中的多个矩阵.每个矩阵包含每15分钟每头奶牛之间的距离.

现在我想把这些矩阵分离和重组,这样我就有了一个每个个体的矩阵,它是整个周期的距离.

这是我正在使用的几个例子:

Results[["2023-08-15 00:01:00"]] <- data.frame(
 Cow1 = c(NA, 65, 2, 7),
 Cow2 = c(65, NA, 16, 84),
 Cow3 = c(2, 16, NA, 8),
 Cow4 = c(7, 84, 8, NA))

Results[["2023-08-15 00:16:00"]] <- data.frame(
 Cow1 = c(NA, 65, 2, 7),
 Cow2 = c(65, NA, 16, 84),
 Cow3 = c(2, 16, NA, 8),
 Cow4 = c(7, 84, 8, NA))

我想要的数据是这样的:

Results[["Cow1"]] <- data.frame(
 "2023-08-15 00:01:00" = c(NA, 65, 2, 7),
 "2023-08-15 00:16:00" = c(NA, 65, 2, 7)
)

我还是个初学者,所以我不知道该怎么做,也不知道怎么弄明白.但我试过这个:

Results_Cows <- tapply(result, names(result), dplyr::bind_rows)

编辑: 以下是列表中的结果

"2023-08-15 00:01:00" <- data.frame(
  Cow1 = c(NA, 65, 2, 7),
  Cow2 = c(65, NA, 16, 84),
  Cow3 = c(2, 16, NA, 8),
  Cow4 = c(7, 84, 8, NA))

"2023-08-15 00:16:00" <- data.frame(
  Cow1 = c(NA, 65, 2, 7),
  Cow2 = c(65, NA, 16, 84),
  Cow3 = c(2, 16, NA, 8),
  Cow4 = c(7, 84, 8, NA))

Results <- list("2023-08-15 00:01:00", "2023-08-15 00:16:00")

推荐答案

这里有两种替代方法.

base R approach

迭代唯一的奶牛并提取results年中该日期的每一头相关奶牛.

(cows <- unique(unlist(lapply(results, names))))
# [1] "Cow1" "Cow2" "Cow3" "Cow4"
lapply(cows, \(cow) {
    lapply(results, \(date) {
        date[[cow]]
    })
}) |> setNames(cows)

输出(输出到jsonlite::toJSON(pretty = TRUE),因为R以可怕的格式打印嵌套列表).

{
  "Cow1": {
    "2023-08-15 00:01:00": ["NA", 65, 2, 7],
    "2023-08-15 00:16:00": ["NA", 65, 2, 7]
  },
  "Cow2": {
    "2023-08-15 00:01:00": [65, "NA", 16, 84],
    "2023-08-15 00:16:00": [65, "NA", 16, 84]
  },
  "Cow3": {
    "2023-08-15 00:01:00": [2, 16, "NA", 8],
    "2023-08-15 00:16:00": [2, 16, "NA", 8]
  },
  "Cow4": {
    "2023-08-15 00:01:00": [7, 84, 8, "NA"],
    "2023-08-15 00:16:00": [7, 84, 8, "NA"]
  }
}

dplyr approach

bind_rows()个你的原始列表,让你pivot_longer()你的数据.第split()章又是一个名字,又是一个日期

library(dplyr)
results |>
    bind_rows(.id = "date") |>
    tidyr::pivot_longer(-date) |>
    split(~name) |>
    lapply(\(df)
        lapply(
            split(df, ~date),
            \(x) x$value
        )
    )

输出同上.

Input data

results <- list(`2023-08-15 00:01:00` = structure(list(Cow1 = c(NA, 65, 
2, 7), Cow2 = c(65, NA, 16, 84), Cow3 = c(2, 16, NA, 8), Cow4 = c(7, 
84, 8, NA)), class = "data.frame", row.names = c(NA, -4L)), `2023-08-15 00:16:00` = structure(list(
    Cow1 = c(NA, 65, 2, 7), Cow2 = c(65, NA, 16, 84), Cow3 = c(2, 
    16, NA, 8), Cow4 = c(7, 84, 8, NA)), class = "data.frame", row.names = c(NA, -4L)))

R相关问答推荐

当使用stat_summary()+ after_stat()在图表上标记中位数/均值时,如何整齐地定位geom_text标签

用apply/map/etch替换循环以加快速度

R -创建一列,指示另一列是否具有相同的值

即使声明引发错误,R函数也会在第二次try 时返回结果

在通过最大似然估计将ODE模型与数据匹配时,为什么要匹配实际参数的转换值?

基于shiny 应用程序中的日期范围子集xts索引

如果列中存在相同的字符串,则对行值进行总和

将年度数据插入月度数据

将包含卷的底部25%的组拆分为2行

标识R中多个列中缺少的唯一值

以更少间隔的较小表中的聚合离散频率表

在RStudio中堆叠条形图和折线图

为了网络分析目的,将数据框转换为长格式列联表

无法正确设置动态创建的Quarto标注的格式

使用for循环和粘贴创建多个变量

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

正则表达式在第二个管道和第二个T之后拆分R中的列

R中时间间隔的大向量与参考时间间隔的相交

附加中缀操作符