【问题标题】:How do i calculate row sums based on the the row value across partial matched column names in R如何根据 R 中部分匹配列名的行值计算行总和
【发布时间】:2020-07-26 09:13:15
【问题描述】:

我的原始数据有超过 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 来对最后值为 4 的 ADMDATE 列和后续列(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

【问题讨论】:

  • 您好,如果下面的答案对您有帮助,请随时accept one of the answer,点击投票按钮旁边的复选标记最适合您:-) 每个帖子只能接受一个答案。

标签: r filter rowsum partial-matches


【解决方案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保留&gt;=Outcomessum的所有值。

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')

【讨论】:

    【解决方案2】:
    # 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 有偏差。

    【讨论】:

    • 很棒的周转时间。此代码有效。快速提问,我是一个新的 R 用户,你有什么资源可以帮助我编写这些复杂的函数吗?
    • @lesaBee 我很高兴听到它对您有很好的帮助。你以前用其他语言编程吗?或者 R 是你的第一语言?最主要的是,R 是一种函数式编程语言。因此,任何教程和尝试使用函数式编程函数applylapplysapplymapplytapplyMapReduce 都会对您有很大帮助。还要研究 Hadley Wickham 包中的 apply 函数,尤其是 dplyrtidyrstringrggplot2。就我个人而言,学习lisp 语言对我更好地理解 R 有很大帮助。
    猜你喜欢
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2021-03-26
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    相关资源
    最近更新 更多