在 R 中重塑和求和数据帧值

Reshaping and summing dataframe values in R

我有一个这样的数据框 (full):

通过合并数字 ID 代码列表和数据框(可重现示例)获得:

library(plyr)
library(dplyr)

#Create example list: ID codes

l1 <- c(10, 100, 1500)
l2 <- c(45, 100)
l3 <- c(100, 1500, 3000, 4000)

l <- list(l1, l2, l3)

#Convert list into dataframe
ldf <- ldply(l, rbind)

#Create example dataframe
i <- data.frame(index = c(1, 3, 5))

#Merge the two dataframes
full <- merge(i, ldf, by = 'row.names', all = TRUE) %>% select(-Row.names)

我想按如下方式重塑数据框:

为了得到每个ID码的索引值之和。

有什么想法吗??

在 Base R 中,我们可以 aggregate 堆叠它们后的值:

aggregate(index~values, cbind(full['index'],stack(full,-1)), sum)

  values index
1     10     1
2     45     3
3    100     9
4   1500     6
5   3000     5
6   4000     5

使用 tidyverse:

library(tidyverse)

full %>% 
   pivot_longer(-index, values_drop_na = TRUE) %>%
   group_by(value) %>%
   summarise(sum_index = sum(index))

# A tibble: 6 x 2
  value sum_index
  <dbl>     <dbl>
1    10         1
2    45         3
3   100         9
4  1500         6
5  3000         5
6  4000         5

这是一个data.table方法:

library(data.table)

melt(setDT(full),id="index",na.rm=T)[, .(Sum.index = sum(index)), by=.(Cell.ID=value)]

输出:

   Cell.ID Sum.index
1:      10         1
2:      45         3
3:     100         9
4:    1500         6
5:    3000         5
6:    4000         5