0

我的原始数据有超过 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
4

2 回答 2

1

您可以使用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和的所有值。sumOutcomes

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')
于 2020-07-26T09:21:59.363 回答
1
# 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.

于 2020-07-26T10:41:02.890 回答