框架有code1code2code3列等,其中存储有代码.对于每个代码,都有一列使用天数为days_used1days_used2days_used3等.我想获得一个收件箱,其中包括每个代码的一列,其中包含code中每个值的days_used总和.

data.frame(ID = c(1, 2, 3, 4, 5,6),
            code1 = c('D', 'D', 'C', 'A', 'G', "A"),
           quantity1 = c(10, 10, 15, 30, 20, 10),
           dose1 = c(5, 5, 15, 0.5, 2, 10), 
           days_used1 = c(NA, NA, 90, 63, 20, 50),
           code2 = c('A', 'H', 'D', 'G', 'A', "A"),
           quantity2 = c(5, 10, 10, 20, 20, 5),
           dose2 = c(0.1, 15, 15, 7, 5, 12), 
           days_used2 = c(15, NA, NA, 50, 20, 10),
           code3 = c('A', 'H', 'C', 'A', 'D', "D"),
           quantity3 = c(10, 10, 15, 30, 20, 10),
           dose3 = c(5, 5, 15, 0.5, 2, 10), 
           days_used3 = c(15, NA, NA, 50, 20, 10)
 )

所以我想要一个像这样的藤壶:

data.frame(ID = c(1, 2, 3, 4, 5),
                  A= c(30, 0, 0, 20, 60),
                  D = c(0, 0, 0, 0, 20, 10),
                  C= c(0, 0, 90, 0, 20, 10),
                  G= c(0, 0, 0, 50, 20, 0),
                  H= c(0, 0, 0, 0, 0)
)

我真的不知道如何才能完成这件事.我try 了下面例子的方法,但这显然行不通

ifelse(test[paste0("code",c(1:3))] == "A",
         sum(test[paste0("code",c(1:3)) == "A"]+1), 
         0)
     code1 code2 code3
[1,]     0     0     0
[2,]     0     0     0
[3,]     0     0     0
[4,]     0     0     0
[5,]     0     0     0
[6,]     0     0     0

推荐答案

library(data.table)

dcast(
      melt(setDT(test), id=1L,
           measure=patterns("^code", "^days"),
           value.name=c("Code", "Days"))[,
            .(sumDays = sum(Days, na.rm = T)), 
            .(ID, Code)],
      ID  ~ Code, value.var = c("sumDays"), fill = 0)

#>    ID   A  C  D  G H
#> 1:  1  30  0  0  0 0
#> 2:  2   0  0  0  0 0
#> 3:  3   0 90  0  0 0
#> 4:  4 113  0  0 50 0
#> 5:  5  20  0 20 20 0
#> 6:  6  60  0 10  0 0

创建于2024年4月23日,共有reprex v2.0.2

R相关问答推荐

lightgbm发动机在tidymmodels中的L1正则化""

删除列表中存储的数据帧内和数据帧之间的重复行

为什么舍入POSIXct会更改能力以匹配等效的POSIXct?

当我们有多个特殊字符时,使用gsub删除名称和代码'

为什么当用osmdata映射R时会得到相邻状态?

汇总数据表中两个特定列条目的值

在ggplot2中更改小提琴情节的顺序

try 将 colored颜色 编码添加到ggploly的标题中

仅 Select 超过9行的CSV文件

如何将网站图像添加到带有极坐标的面包裹条形图?

按列中显示的配对组估算NA值

创建列并对大型数据集中的特定条件进行成对比较的更高效程序

为R中的16组参数生成10000个样本的有效方法是什么?

如何预测原始数据集并将值添加到原始数据集中

按组和连续id计算日期差

创建新列,其中S列的值取决于该行S值是否与其他行冗余

使用LAG和dplyr执行计算,以便按行和按组迭代

在鼠标悬停时使用Plotly更改geom_point大小

如何在R中的两列以上使用联合(&U)?

使用dplyr删除具有条件的行