【问题标题】:Find a certain value and copy that into another data.frame找到某个值并将其复制到另一个 data.frame
【发布时间】:2014-10-08 06:38:51
【问题描述】:

我有一个 data.frame,我想在其中找到 D 或 E 列中的第一个更改。找到此值后,我想将其复制到行数较少的新 data.frame 中。

这是一个例子:

ID  Group   Subgroup    D          E  
 1  1   A   2   1.25     1.10
 2  2   A   2   1.25     1.10
 3  3   A   2   1.25     1.10
 4  4   A   2   1.30     1.10
 5  5   A   2   1.32     1.10
 6  6   A   2   1.32     1.10
 7  7   B   4   3.20     2.42
 8  8   B   4   3.20     2.42
 9  9   B   4   3.20     2.49
10  10  B   4   3.20     2.53
11  11  B   4   3.20     2.57
12  12  B   4   3.20     2.57
13  13  C   3   2.10     1.80
14  14  C   3   2.10     1.80
15  15  C   3   2.10     1.87
16  16  C   3   2.10     1.90
17  17  A   5   3.30     2.50
18  18  A   5   3.30     2.50
19  19  A   5   3.40     2.50

我想检测每个组和子组的变化,所以对于 D 1.3 [4,4] 的 A.2 ;对于 B.4 在 E 2.49 [9,5] ;对于 C.3 在 E 1.87 [15,5] 和对于 A.5 在 D 3.4 [19,4]

然后我希望这些值位于一个新的data.frame 中,其中只显示感兴趣的值的行更少。

在这种情况下,这将是 4x1,其中包含 A.2、B.4、C.3 和 A.5 行以及名为“reactionT”的列,其中存储了来自 D 或 E 的值。像这样的:

ID         Group      Subgroup   reationT  
1   1   A   2   1.30
2   2   B   4   2.49
3   3   C   3   1.87
4   4   A   5   3.40

【问题讨论】:

    标签: r compare dataframe


    【解决方案1】:

    不清楚您希望如何处理“D”列和“E”列同时发生更改的可能情况,因此我将它们作为单独的列保留。

    这是一种可能的方法:

    library(data.table)
    as.data.table(df1)[, list(D = D[diff(c(D[1], D)) > 0][1], 
                              E = E[diff(c(E[1], E)) > 0][1]), 
                       by = list(Group, Subgroup)]
    #    Group Subgroup   D    E
    # 1:     A        2 1.3   NA
    # 2:     B        4  NA 2.49
    # 3:     C        3  NA 1.87
    # 4:     A        5 3.4   NA
    

    如果您知道在这种折叠形式中“D”和“E”列中永远不会同时存在值,我想您可以使用 sumna.rm = TRUE 将这些列折叠成 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多