创建具有多行的新列

别尔斯克

我有一个数据框,如下所示:

dat <- read.table(text=
"ID | Year | Month | Variable | Value1 | Value2 | Value3
  1 | 1950 |   1   |   PRCP   |  0     |   1    |   0
  1 | 1950 |   1   |   TMAX   |  52    |   51   |   52
  1 | 1950 |   1   |   TMIN   |  41    |   41   |   39
  1 | 1950 |   2   |   PRCP   |  1     |   0    |   1
  1 | 1950 |   2   |   TMAX   |  55    |   57   |   58",
  header=TRUE, sep="|")

有50个站点ID,年份跨度为1950-2005,第1-12个月,有3个天气变量(PRCP,TMAX和TMIN),然后每月的每一天的Value1-Value31列以及天气变量测量值。

我想创建一个看起来像这样的数据框:

ID | Date       | PRCP
1  | 1950-01-01 |  0
1  | 1950-01-02 |  1
1  | 1950-01-03 |  0

到目前为止,我已经能够为每个天气变量创建3个单独的数据集,但是我不知道如何创建新列并相应地扩展行(每个月的每一天需要31个新行)。我是R的新手,将不胜感激-谢谢!

阿克伦

我们可以使用melt/dcastdata.table我们将'data.frame'转换为'data.table'(setDT(dat)),使用'宽'格式重整为'长'格式melt,并创建一个按ID,年,月分组的序列列(ind) ”和“变量”。通过粘贴“年”,“月”和“ ind”创建“日期”列,然后使用将其重塑为“宽”格式dcast无需创建三个单独的数据集,我们可以将所有信息包含在一个数据集中。

library(data.table)#v1.9.6+
dM <- melt(setDT(dat), measure=patterns('^Value'))
dM1 <- dM[, ind:= 1:.N, by = .(ID, Year, Month, Variable)]
dM1[, Date:=as.Date(sprintf('%04d-%02d-%02d', Year, Month, ind))]
dcast(dM1, ID+Date~Variable, value.var='value1')
#   ID       Date PRCP TMAX TMIN
#1:  1 1950-01-01    0   52   41
#2:  1 1950-01-02    1   51   41
#3:  1 1950-01-03    0   52   39
#4:  1 1950-02-01    1   55   NA
#5:  1 1950-02-02    0   57   NA
#6:  1 1950-02-03    1   58   NA

注意:在示例数据中,OP仅提供了3个“值”列。我猜在原始数据集中,它将是31列。

数据

dat <-  structure(list(ID = c(1, 1, 1, 1, 1), Year = c(1950, 1950, 1950, 
1950, 1950), Month = c(1, 1, 1, 2, 2), Variable = c("PRCP", "TMAX", 
"TMIN", "PRCP", "TMAX"), Value1 = c(0, 52, 41, 1, 55), Value2 = c(1, 
51, 41, 0, 57), Value3 = c(0, 52, 39, 1, 58)), .Names = c("ID", 
"Year", "Month", "Variable", "Value1", "Value2", "Value3"),
row.names = c(NA, -5L), class = "data.frame")

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建具有多行条件的列

来自分类Dev

创建具有多行条件的列

来自分类Dev

熊猫:根据条件创建具有随机值的新列

来自分类Dev

基于具有min函数的列比较创建新数据

来自分类Dev

如何创建具有唯一值的新列

来自分类Dev

如果一列在数据框中具有多个值,则创建多行

来自分类Dev

为具有多列和多行的块创建引导网格

来自分类Dev

在多行中包含具有行号的列

来自分类Dev

具有相同fk的多行至列

来自分类Dev

SQL:插入具有公共列的多行

来自分类Dev

从 R 中具有相同 ID 的行创建新变量(在新列中但不创建新列)

来自分类Dev

连接同一csv文件的列以创建具有新标题的新列

来自分类Dev

SQL在新列中创建具有先前日期的新列

来自分类Dev

如何基于在熊猫数据框中具有NaN的现有列创建新列?

来自分类Dev

从 R 中具有不同值的现有列创建新列

来自分类Dev

使用JFreechart创建具有多行的正态分布图

来自分类Dev

使用ImageMagick创建具有多行的调色板图像

来自分类Dev

从闪亮的输入创建具有多行的数据框

来自分类Dev

mysql; 如果多行具有相同的 id,则创建单行

来自分类Dev

Apache NiFi:如何比较csv中的多行并创建新列

来自分类Dev

如果另一列中的值> 0,则创建具有逻辑值的新列

来自分类Dev

创建新表时,如何默认具有其他表的列值的列?

来自分类Dev

在多个列中创建具有最大价值计数的新列

来自分类Dev

Pyspark基于具有列表或集合的多个条件的其他列创建新列

来自分类Dev

在特定列[R]中仅创建具有非NA的新列

来自分类Dev

根据其他具有条件的列值创建新列

来自分类Dev

如何使用 groupby 创建具有两个关联列的新列?

来自分类Dev

如何根据另一列 SQL 中的值创建具有计数值的新列

来自分类Dev

如何从两个具有相同列的现有表创建新的配置单元表

Related 相关文章

  1. 1

    创建具有多行条件的列

  2. 2

    创建具有多行条件的列

  3. 3

    熊猫:根据条件创建具有随机值的新列

  4. 4

    基于具有min函数的列比较创建新数据

  5. 5

    如何创建具有唯一值的新列

  6. 6

    如果一列在数据框中具有多个值,则创建多行

  7. 7

    为具有多列和多行的块创建引导网格

  8. 8

    在多行中包含具有行号的列

  9. 9

    具有相同fk的多行至列

  10. 10

    SQL:插入具有公共列的多行

  11. 11

    从 R 中具有相同 ID 的行创建新变量(在新列中但不创建新列)

  12. 12

    连接同一csv文件的列以创建具有新标题的新列

  13. 13

    SQL在新列中创建具有先前日期的新列

  14. 14

    如何基于在熊猫数据框中具有NaN的现有列创建新列?

  15. 15

    从 R 中具有不同值的现有列创建新列

  16. 16

    使用JFreechart创建具有多行的正态分布图

  17. 17

    使用ImageMagick创建具有多行的调色板图像

  18. 18

    从闪亮的输入创建具有多行的数据框

  19. 19

    mysql; 如果多行具有相同的 id,则创建单行

  20. 20

    Apache NiFi:如何比较csv中的多行并创建新列

  21. 21

    如果另一列中的值> 0,则创建具有逻辑值的新列

  22. 22

    创建新表时,如何默认具有其他表的列值的列?

  23. 23

    在多个列中创建具有最大价值计数的新列

  24. 24

    Pyspark基于具有列表或集合的多个条件的其他列创建新列

  25. 25

    在特定列[R]中仅创建具有非NA的新列

  26. 26

    根据其他具有条件的列值创建新列

  27. 27

    如何使用 groupby 创建具有两个关联列的新列?

  28. 28

    如何根据另一列 SQL 中的值创建具有计数值的新列

  29. 29

    如何从两个具有相同列的现有表创建新的配置单元表

热门标签

归档