我有一個這樣的資料框(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 代碼的索引值的總和。
任何的想法??
uj5u.com熱心網友回復:
在 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
uj5u.com熱心網友回復:
這是一個 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/478508.html
