R遍历数据框的各列以根据开始结束年份创建新列

三德

我有这样的开始/结束年份的租赁数据框架

region=c("a","b","c","d")
lease=c("x","y","z","k")
startyr=c(2000,2001,2003,2002)
endyr=c(2004,2004,2006,2005)
annualAmt=c(7000,8500,6000,5500)
df=data.frame(region,lease,startyr,endyr,annualAmt)

我想通过将数据框重塑为所需的输出来扩展年份:

region lease 2000 2001 2002 ... 2006
a x 7000 7000 7000 7000 7000 0 0
b y 0 8500 8500 8500 8500 0 0 

逻辑是,如果租约涵盖2000-2004年,则其amt将计入2000,2001..2004 col

最好的方法是什么?如果编写循环,该如何命名新创建的year cols 2000-2006?还是应该使用申请?

A5C1D2H2I1M1N2O1R2T1

这是一个替代方案,主要涉及基本的加法和减法:

Rows <- df$endyr - df$startyr               # How many times to repeat rows?
df <- df[rep(rownames(df), Rows), ]         # Repeat the rows
df$year <- df$startyr + sequence(Rows) - 1  # Add a new "year" variable
reshape(df, direction = "wide",             # Reshape, long to wide
        idvar = c("region", "lease"),       # idvars are the first two cols
        timevar = "year",                   # timevar is the new year col
        drop = c("startyr", "endyr"))       # and drop the start/endyr cols
#   region lease annualAmt.2000 annualAmt.2001 annualAmt.2002
# 1      a     x           7000           7000           7000
# 2      b     y             NA           8500           8500
# 3      c     z             NA             NA             NA
# 4      d     k             NA             NA           5500
#   annualAmt.2003 annualAmt.2004 annualAmt.2005
# 1           7000             NA             NA
# 2           8500             NA             NA
# 3           6000           6000           6000
# 4           5500           5500             NA

另外,您可以使用“ data.table”,如下所示:

library(data.table)
## Start with your original df
dt <- data.table(df)
dcast.data.table(
  DT[, list(year = seq(startyr, endyr), 
            annualAmt), 
     by = list(region, lease)], 
  region + lease ~ year, 
  value.var = "annualAmt", fill = 0)
#    region lease 2000 2001 2002 2003 2004 2005 2006
# 1:      a     x 7000 7000 7000 7000 7000    0    0
# 2:      b     y    0 8500 8500 8500 8500    0    0
# 3:      c     z    0    0    0 6000 6000 6000 6000
# 4:      d     k    0    0 5500 5500 5500 5500    0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R遍历数据框的各列以根据开始结束年份创建新列

来自分类Dev

遍历数据框列表以创建新列

来自分类Dev

如何遍历数据框中的列值,取均值并创建新的数据框?

来自分类Dev

如何遍历数据框,创建新列并在python中为其添加值

来自分类Dev

如何遍历数据框,创建新列并在python中为其添加值

来自分类Dev

如何遍历数据框中的列?

来自分类Dev

遍历数据框中的多列

来自分类Dev

Pyspark:如何遍历数据框列?

来自分类Dev

循环遍历数据框的两列

来自分类Dev

遍历数据帧以产生新列

来自分类Dev

我们如何基于列循环遍历数据框并根据条件检索行

来自分类Dev

遍历数据框并根据条件将增量值添加到列中

来自分类Dev

根据条件根据列的总和值创建新的数据框

来自分类Dev

遍历数据框以添加具有顺序值的新列

来自分类Dev

遍历数据框以添加具有顺序值的新列

来自分类Dev

为什么我不能遍历数据框中的新列?

来自分类Dev

有没有一种方法可以遍历数据框并根据列表在新列中分配值?

来自分类Dev

遍历Pandas数据框的列并创建新变量

来自分类Dev

遍历熊猫数据框并创建新的列值

来自分类Dev

根据R中的其他列创建新的数据框列

来自分类Dev

R-根据与现有列匹配的值索引创建新的列数据框

来自分类Dev

根据其他 3 列的结果在 R 数据框中创建新列

来自分类Dev

遍历数据框以在R中创建图

来自分类Dev

遍历数据框列表以在R中创建图形

来自分类Dev

无法根据数据框中提供的数据创建新列

来自分类Dev

R使用R根据现有列为数据框创建新列

来自分类Dev

如何遍历数据框df中的选定列?

来自分类Dev

遍历数据框列的多个操作(应用功能?)

来自分类Dev

遍历数据框列后如何追加列表?

Related 相关文章

  1. 1

    R遍历数据框的各列以根据开始结束年份创建新列

  2. 2

    遍历数据框列表以创建新列

  3. 3

    如何遍历数据框中的列值,取均值并创建新的数据框?

  4. 4

    如何遍历数据框,创建新列并在python中为其添加值

  5. 5

    如何遍历数据框,创建新列并在python中为其添加值

  6. 6

    如何遍历数据框中的列?

  7. 7

    遍历数据框中的多列

  8. 8

    Pyspark:如何遍历数据框列?

  9. 9

    循环遍历数据框的两列

  10. 10

    遍历数据帧以产生新列

  11. 11

    我们如何基于列循环遍历数据框并根据条件检索行

  12. 12

    遍历数据框并根据条件将增量值添加到列中

  13. 13

    根据条件根据列的总和值创建新的数据框

  14. 14

    遍历数据框以添加具有顺序值的新列

  15. 15

    遍历数据框以添加具有顺序值的新列

  16. 16

    为什么我不能遍历数据框中的新列?

  17. 17

    有没有一种方法可以遍历数据框并根据列表在新列中分配值?

  18. 18

    遍历Pandas数据框的列并创建新变量

  19. 19

    遍历熊猫数据框并创建新的列值

  20. 20

    根据R中的其他列创建新的数据框列

  21. 21

    R-根据与现有列匹配的值索引创建新的列数据框

  22. 22

    根据其他 3 列的结果在 R 数据框中创建新列

  23. 23

    遍历数据框以在R中创建图

  24. 24

    遍历数据框列表以在R中创建图形

  25. 25

    无法根据数据框中提供的数据创建新列

  26. 26

    R使用R根据现有列为数据框创建新列

  27. 27

    如何遍历数据框df中的选定列?

  28. 28

    遍历数据框列的多个操作(应用功能?)

  29. 29

    遍历数据框列后如何追加列表?

热门标签

归档