【问题标题】:Creating a new variable in R [duplicate]在R中创建一个新变量[重复]
【发布时间】:2017-01-07 05:58:01
【问题描述】:

数据集包含四列(id、x1、x2 和 y1)。请注意,有一些多条记录(按 id)。

这是数据:

id <- c(1,  1,  1,  1,  2,  3,  3,  3,  4,  4,  4,  4,  5,  5, 5, 6)    
x1 <- c("a","b","c","a","a","a","c","c","b", "e", "w", "r", "b", "c", "w", "r")
x2 <- c(0.12,   0.76,   0.08,   0.11,   0.80,   0.24,   0.19,   0.07,   0.70,   0.64,   0.97,   0.04,   0.40,   0.67,   0.25, 0.01)
y1 <- c(1132,   1464,   454,    1479,   167,    335,    280,    391,    973,    1343,   777,    1333,   293,    694,    76, 114)
mdat <- data.frame(id, x1, x2, y1)

我想创建一个新列(我们称之为 y2)。 ys 定义为

y2(i) = y1(i-1) 对于相同的 id。不是只有一个 id 的数据,然后 y2=NA。

这是输出:

id  x1  x2       y1     y2
1   a   0.12    1132    
1   b   0.76    1464    1132
1   c   0.08    454     1464
1   a   0.11    1479    454
2   a   0.8     167 
3   a   0.24    335 
3   c   0.19    280     335
3   c   0.07    391     280
4   b   0.7     973 
4   e   0.64    1343    973
4   w   0.97    777     1343
4   r   0.04    1333    777
5   b   0.4     293 
5   c   0.67    694     293
5   w   0.25    76      694
6   r   0.01    114 

【问题讨论】:

  • 在标记问题以关闭它之前...让我知道出了什么问题。谢谢!
  • 你没有表现出任何尝试自己解决它。
  • 我试过了,但是一直报错...
  • mdat$y2 &lt;- ave(mdat$y1, mdat$id, FUN = function(x){c(NA, x[-length(x)])}) or ave(mdat$y1, mdat$id, FUN = dplyr::lag) or ave(mdat$y1, mdat$id, FUN = data.table::shift) 或翻译成您喜欢的语法。

标签: r


【解决方案1】:

这是您可能要考虑使用dplyr 包中的lag 函数的替代方法

> mdat$y2 <- unlist(tapply(mdat$y1, mdat$id, lag, 1))
> mdat
   id x1   x2   y1   y2
1   1  a 0.12 1132   NA
2   1  b 0.76 1464 1132
3   1  c 0.08  454 1464
4   1  a 0.11 1479  454
5   2  a 0.80  167   NA
6   3  a 0.24  335   NA
7   3  c 0.19  280  335
8   3  c 0.07  391  280
9   4  b 0.70  973   NA
10  4  e 0.64 1343  973
11  4  w 0.97  777 1343
12  4  r 0.04 1333  777
13  5  b 0.40  293   NA
14  5  c 0.67  694  293
15  5  w 0.25   76  694
16  6  r 0.01  114   NA

【讨论】:

    【解决方案2】:

    dplyr的解决方案

    library(dplyr)
    
    mdat %>%
      group_by(id) %>%
      mutate(y2 = y1 - c(NA,y1[-length(y1)]))
    

    【讨论】:

    • dplyr 有一个lag 函数......
    • 您还需要删除y1 - ,否则结果将与预期不符。
    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 2016-10-19
    • 2016-03-09
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多