r - 将每个 id 和法律(带有开始和结束年份)的一行数据框转换为一个文件,每个 id 和年份都有一行

标签 r dataframe

我有一个名为 laws 的 df,每个法律都有一行(每个 id 一个):

laws <- data.frame(id=c(1,2,3),beginyear=c(2001,2002,2005),endyear=c(2003,2005,2006), law1=c(0,0,1), law2=c(1,0,1))

我想从中创建第二个名为 idyear 的行,每个 ID 和年份都有一行:
idyear <- data.frame(id=c(rep(1,6),rep(2,6),rep(3,6)), year=(rep(c(2001:2006),3)), law1=c(rep(0,16),1,1), law2=c(1,1,1,rep(0,13),1,1))

我如何有效地编写一些代码来从 idyear df 获取 laws df 输出?如果 idyear$year 是 >= laws$beginyear AND idyear$year 是 <= laws$endyear ,则这两个定律变量是指示变量 == 1。

我是 R 的初学者,但我愿意尝试任何事情(应用、循环等)来让它发挥作用。

最佳答案

使用 的解决方案。最后一个 as.data.frame() 是可选的,它只是将 tbl 转换为数据帧。

library(tidyverse)

idyear <- laws %>%
  mutate(year = map2(beginyear, endyear, `:`)) %>%
  unnest() %>%
  complete(id, year = full_seq(year, period = 1L), fill = list(law1 = 0L, law2 = 0L)) %>%
  select(-beginyear, -endyear) %>%
  as.data.frame()
idyear
#    id year law1 law2
# 1   1 2001    0    1
# 2   1 2002    0    1
# 3   1 2003    0    1
# 4   1 2004    0    0
# 5   1 2005    0    0
# 6   1 2006    0    0
# 7   2 2001    0    0
# 8   2 2002    0    0
# 9   2 2003    0    0
# 10  2 2004    0    0
# 11  2 2005    0    0
# 12  2 2006    0    0
# 13  3 2001    0    0
# 14  3 2002    0    0
# 15  3 2003    0    0
# 16  3 2004    0    0
# 17  3 2005    1    1
# 18  3 2006    1    1

关于r - 将每个 id 和法律(带有开始和结束年份)的一行数据框转换为一个文件,每个 id 和年份都有一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48029629/

相关文章:

从宏 (Excel) 运行 R 脚本

python - Pandas:根据另一列的匹配项替换列值

python - 如何将一列中的文本拆分为多行

python - 根据 Pandas 上的多个键列减去值

python - 为每行值生成描述性统计数据并动态转置

r - 匹配与列名(对称或非对称矩阵)相同的行名

r - 如果模型中存在变量的条件表达式

python-3.x - 在Python中从中文字符串日期中提取日期

r - 自动创建 person 的 "age at event"变量的过程

r - tidyr::spread tidyr::pivot_wider 每个键有多个不同的值