簡體   English   中英

如何根據 R 中部分匹配列名的行值計算行總和

[英]How do i calculate row sums based on the the row value across partial matched column names in R

我的原始數據有超過 30、000 行和 100 列。這是一個例子:數據集

df <- data.frame(Outcomes= c(3, 4, 5, 6), 
ADMDATE_3=c(10,7,9, 7), 
ADMDATE_4=c(4,10,6,9),
ADMDATE_5=c(2, 11 ,8,8), 
ADMDATE_6=c(4.5,7,9,12))

我的預期結果是我想使用結果列中的值,例如 4 對 ADMDATE 列求和,該列的末尾值為 4 和后續列(mydataset 的剩余長度)。 另一個例子是如果結果 = 5,那么我想要 ADMDate 5 到 6 的總和。

這是我的預期表

 Outcomes ADMDATE_3 ADMDATE_4 ADMDATE_5 ADMDATE_6 sum_all
         3        10         4         2       4.5    20.5
         5         7        10        11       7.0    18.0
         6         9         6         8       9.0    9.0
         4         7         9         8      12.0    29.0

您可以使用applymatch列名和sum

apply(df, 1, function(x) 
     sum(x[match(paste0('ADMDATE_', x[1]),names(x)):length(x)]))
#[1] 20.5 28.0 17.0 12.0

或者使用tidyverse以長格式獲取數據,保留所有>= Outcomes的值並為每個Outcomes sum

library(dplyr)
library(tidyr)

df %>%
  pivot_longer(cols = -Outcomes, names_to = c('col','num'), names_sep = "_") %>%
  filter(num >= Outcomes) %>%
  group_by(Outcomes) %>%
  summarise(sum_all = sum(value)) %>%
  left_join(df, by = 'Outcomes')
# translator of Outcomes number to column index
outcomes2index <- 1:ncol(df)
names(outcomes2index) <- gsub("ADMDATE_", "", colnames(df))

df$sum_all <- sapply(1:nrow(df), function(i) sum(df[i, outcomes2index[as.character(df$Outcomes[i])]:ncol(df)]))
df
  Outcomes ADMDATE_3 ADMDATE_4 ADMDATE_5 ADMDATE_6 sum_all
1        3        10         4         2       4.5    20.5
2        4         7        10        11       7.0    28.0
3        5         9         6         8       9.0    17.0
4        6         7         9         8      12.0    12.0

您給定的df偏離了您的expected table

暫無
暫無

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

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