簡體   English   中英

在 R 中,如何對由兩個字符列聚合的 data.table 列中的值求和,其中列名和行名等於字符串 output 的矩陣?

[英]In R how do I sum values in a data.table column aggregated by two character columns, with matrix with colnames and rownames equal to strings output?

我有一個 large.csv 文件,其中包含最近大規模森林調查的結果,其中每一行都包含給定的單個樹的位置、物種身份和測量的橫截面積。 我使用fread()將 this.csv 讀入 RStudio 以產生data.table 我想把這個大的data.table成一個matrix ,使得每一行對應一個位置,每一列對應一個物種,每個單元格包含該物種在該位置的所有橫截面積的總和。

下面是從控制台復制的我的數據格式的虛擬data.table 單元格中的值是raw.inputx-sect area列的總和值。

> raw.input <- fread("raw_input.csv")
> raw.input
      site  sp x-sect area
1: hilltop sp2          10
2: hilltop sp1           3
3: hilltop sp1           5
4: hilltop sp1           4
5: hilltop sp1           3
6:  stream sp3          45
7:  stream sp3          50
8:  stream sp1           4

下面是我想要的格式的matrix ,生成為 a.csv 是 MS Excel,使用fread()讀取,並轉換為 RStudio 中的matrix

> mtrx.tmp <- fread("mtrx_final.csv")
> mtrx <- as.matrix(mtrx.tmp[,2:4]) #remove character strings so matrix is numeric
> row.names(mtrx) <- mtrx.tmp$site  #mtrx.tmp$site is equivalent to mtrx.tmp[,1] in content
> mtrx
        sp1 sp2 sp3
hilltop  15  10   0
stream    4   0  95

如果data.table是讀取此數據集的不適當/低效格式,請務必將其包含在您的答案中。

您可以為此使用dcastdata.table (並且data.table非常適合此任務):

library(data.table)
    
raw.input <- structure(list(site = c("hilltop", "hilltop", "hilltop", "hilltop", 
"hilltop", "stream", "stream", "stream"), sp = c("sp2", "sp1", 
"sp1", "sp1", "sp1", "sp3", "sp3", "sp1"), `x-sect area` = c(10L, 
3L, 5L, 4L, 3L, 45L, 50L, 4L)), row.names = c(NA, -8L), class = c("data.table", 
"data.frame"))

dcast(raw.input, site ~ sp, value.var="x-sect area", fun.aggregate = sum) |> 
  as.matrix(, rownames=1)
#>         sp1 sp2 sp3
#> hilltop  15  10   0
#> stream    4   0  95

代表 package (v2.0.1) 於 2022 年 7 月 27 日創建

部分答案 - function aggregate()執行所需的位置和物種水平的橫截面積總和。

> aggregate(raw.input$`x-sect area`,list(raw.input$site,raw.input$sp),FUN=sum)
  Group.1 Group.2  x
1 hilltop     sp1 15
2  stream     sp1  4
3 hilltop     sp2 10
4  stream     sp3 95

暫無
暫無

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

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