【问题标题】:Now column from row that meets criteria in R现在符合R中标准的行中的列
【发布时间】:2017-07-12 11:12:50
【问题描述】:

我对 R 相当陌生,我正在努力解决我的问题。我的 R 数据框的简化版本如下:

id year num_inst 
1  1995 4  
1  1996 3
1  1996 3
2  1995 1
2  1997 2 
2  1998 2
3  2005 4
4  1998 1
4  1999 7
...

我要做的是向标记为 num_inst_prior 的每一行添加一个新列值,这取决于满足特定条件的给定行。我所追求的是以下内容:

id year num_inst num_inst_prior 
1  1995 4        NA
1  1996 3        4
1  1996 3        4
2  1995 1        NA
2  1997 2        NA
2  1998 2        2
3  2005 4        NA
4  1998 1        NA
4  1999 7        1
...

也就是说,我想要一个列来表示上一年给定 id 的实例数 (num_inst),即当 year = 1996 且 id = 1 时,上一年的实例数是多少 (num_inst_prior = 4;1995)。

我已尝试添加新列

> df$prior_year <- df$year - 1 

并考虑使用 which 函数作为第一步,但它似乎只能按行操作。这样我就被困在没有“whiches”的第一个障碍上。

> which(df$year == df$prior_year & df$id == df$id)
integer(0)

任何能指引我正确方向的帮助都将不胜感激。

【问题讨论】:

  • 按'id'分组后可以查看lag
  • 我不认为它这么简单,因为并非所有年份数据都为给定的 id 提供。即,如果某个 id 在上一年没有出现 num_inst 值,我需要它显示 NA。

标签: r dataframe data-manipulation


【解决方案1】:

您应该选择dplyr 包中的mutatelag

library(dplyr)
df <- data.frame(id = 1:5,
           year = 1991:1995, 
           prior = 5:9)

  id year prior
1  1 1991     5
2  2 1992     6
3  3 1993     7
4  4 1994     8
5  5 1995     9

df %>% 
  mutate(prior_n1 = lag(prior, 1))

  id year prior prior_n1
1  1 1991     5       NA
2  2 1992     6        5
3  3 1993     7        6
4  4 1994     8        7
5  5 1995     9        8

这里,prior_n1 是要输出的列的名称,滞后函数取:原始列的名称,滞后的长度。

最好的,

科林

【讨论】:

  • 谢谢 Colin,但是,这似乎并不能像我的示例中那样使用给定 id 的重复 id 和/或年份来完成工作(重复是必要的,因为其他列中包含更多信息) .它可能不像滞后那么简单,因为信息不一定是从前一行获得的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
相关资源
最近更新 更多