每月在新列中添加相应的最大值

时间:2019-10-30 11:41:15

标签: r dataframe match

我有以下数据框:

df <- structure(list(locality_id = structure(c(3L, 1L, 2L, 4L), .Label = c("L2762894", 
"L3064193", "L6199859", "L8044094"), class = "factor"), month = structure(c(1L, 
3L, 1L, 2L), .Label = c("1", "2", "3"), class = "factor"), prec01 = c(105, 
109, 133, 79), prec02 = c(29, 34, 34, 35), prec03 = c(18, 48, 
42, 184)), class = "data.frame", row.names = c(NA, -4L))

每个locality的前precipitation three months都有(prec01, prec02, prec03)个值。

我想创建一个唯一的降水列,将每个月的相应降水值与相应月份(列月份)相匹配。结果如下:

#   locality_id month prec
# 1    L6199859     1  105
# 2    L2762894     3  109
# 3    L3064193     1  133
# 4    L8044094     2  184

关于如何产生上述输出的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我理解了您的问题,您想在prec的新precXX栏中保留month的对应值吗?

在那种情况下,在我看来示例不正确,而应该是:

起始数据框:

  locality_id month prec01 prec02 prec03
1    L6199859     1    105     29     18
2    L2762894     3    109     34     48
3    L3064193     1    133     34     42
4    L8044094     2     79     35    184

最终数据框:

 locality_id month prec
1    L6199859     1  105
2    L2762894     3   48
3    L3064193     1  133
4    L8044094     2   35

您可以通过矩阵索引来实现:

i <- as.numeric(df$month)

df$prec <- df[,c(3,4,5)][cbind(seq_along(i), i)]

df[,c(-3,-4,-5)]