【问题标题】:Select column that matches value in other column选择与其他列中的值匹配的列
【发布时间】:2020-12-07 22:14:05
【问题描述】:

我正在尝试提取每个数据点在 R 中燃烧的那一天的最高温度。我的数据框中的前 365 列对应于一年中的某一天(列名 '1'、'2'、...' 365') 和最后一列是数据点的标识符,包括列为一年中某一天的燃烧日 (colname 'dob')(值 = 1、2、...365)。对于每个数据点,我想在对应于燃烧日期的列中选择最大温度值,例如如果数据点在 227 上刻录,则将选择第 227 列中的最大温度值。编码很新,但这通常是我的想法:

>dput(data[1:3, c(1, 225,226,227,365, 366, 374)])
    structure(list(`1` = c(645, 645, 645), `225` = c(900, 900, 900), 
    `226` = c(895, 895, 895), `227` = c(881, 881, 881), `365` = c(605, 
    605, 605), dob = c(227L, 222L, 222L), index = c("blossom_biscuit_1", 
    "blossom_biscuit_2", "blossom_biscuit_3")), row.names = c("1", 
    "2", "3"), class = "data.frame")

当前数据结构:

 |    1...   | ...222... |  226 |   227...  | ...365| **dob** |      index      |
 |:---------:|:---------:|:----:|:---------:|:-----:|:-------:|:----------------|
 |     645   |    900    | 895  |  **881**  |  605  | **227** |blossom_biscuit_1|
 |     645   |  **900**  | 895  |    881    |  605  | **225** |blossom_biscuit_2|

所需的数据结构:

 |  1...  | ...222... |226| 227...|...365| dob |       index      |**dob_tmmax**|
 |:------:|:---------:|:-:|:-----:|:----:|:---:|:-----------------|:-----------:|
 |  645   |     900   |895|  881  |  605 | 227 | blossom_biscuit_1|    881      |
 |  645   |     900   |895|  881  |  605 | 225 | blossom_biscuit_2|    900      |

for 循环的模糊想法来完成这个?

data %>% filter(
   for (i in data) {
                 dob = data$dob
                   x = c(data[i, dob])
          dob_tmmax <- c(data[i, x])
  return(data$dob_tmmax)  
})

【问题讨论】:

  • 你能举一个小例子来更好地理解这个问题以及预期的输出
  • 请使用dput 或我们可以复制和使用的东西添加数据。还显示共享数据的预期输出。了解how to ask a good questionhow to give a reproducible example
  • @akrun 希望我所做的编辑对您有所帮助,感谢您的反馈
  • @RebeccaNaekoWeber 我根据您的示例更新了帖子。谢谢

标签: r dataframe


【解决方案1】:

如果“burn”列表示具有最大“temp”值的列的列索引,则更简单的选项是row/column indexing

df1$maxtemp <- df1[cbind(seq_len(nrow(df1)), df1$burn)]

根据更新,我们可以使用match从'dob'列中获取列索引

nm1 <- grep('\\d+', names(data), value = TRUE)
dob_tmmax <- data[nm1][cbind(seq_len(nrow(data)), match(data$dob, nm1))]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多