【问题标题】:Subtract parts of one frame from another frame (and match headers)从另一帧中减去一帧的部分内容(并匹配标题)
【发布时间】:2020-03-26 09:15:42
【问题描述】:

我正在尝试从另一个 (input1) 中减去一个数据框 (input2),但列的顺序不同,并且第一列是日期字符串。

我以为我可以解决一些简单的问题,例如输出 = 输入 1 - 输入 2,但显然非数字是一个问题。我也不确定这是否适合我的标题(我假设不是)。

有没有一种简单的方法可以做到这一点而无需遍历框架?

input1 <- structure(list(X = c("Standard", "2020-03-24_1", "2020-03-23_2", 
"2020-03-20_3", "2020-03-19_4", "2020-03-18_5", "2020-03-17_6"
), Frank = c(228L, 582L, 129L, 419L, 255L, 574L, 424L), Ben = c(487L, 
540L, 162L, 366L, 292L, 283L, 211L), Millie = c(314L, 371L, 506L, 
143L, 448L, 381L, 369L), Simon = c(428L, 351L, 148L, 111L, 184L, 
225L, 276L), John = c(115L, 212L, 161L, 167L, 517L, 224L, 148L
)), row.names = c(NA, 7L), class = "data.frame")


input2 <- structure(list(X = c("Standard", "2020-03-24_1", "2020-03-23_2", 
"2020-03-20_3", "2020-03-19_4", "2020-03-18_5", "2020-03-17_6"
), Ben = c(315L, 297L, 284L, 347L, 581L, 231L, 365L), Frank = c(562L, 
556L, 174L, 296L, 172L, 359L, 125L), John = c(583L, 471L, 312L, 
258L, 450L, 142L, 478L), Millie = c(181L, 327L, 473L, 232L, 469L, 
443L, 462L), Simon = c(178L, 121L, 277L, 240L, 585L, 106L, 313L
)), row.names = c(NA, 7L), class = "data.frame")

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以根据第二个数据框中的名称对其中一个数据框中的列进行排序,然后直接减去这些值。使用-1,因为我们想忽略第一列。

    input1[-1] - input2[names(input1)[-1]]
    
    #  Frank  Ben Millie Simon John
    #1  -334  172    133   250 -468
    #2    26  243     44   230 -259
    #3   -45 -122     33  -129 -151
    #4   123   19    -89  -129  -91
    #5    83 -289    -21  -401   67
    #6   215   52    -62   119   82
    #7   299 -154    -93   -37 -330
    

    【讨论】:

    • 要在输出中保留 X 列,是否需要单独添加?
    • @nicshah 不,只需将输出分配为input1[-1] &lt;- input1[-1] - input2[names(input1)[-1]]
    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    相关资源
    最近更新 更多