【问题标题】:Subtract by diagonal in R data frame?在R数据帧中减去对角线?
【发布时间】:2018-06-14 15:06:04
【问题描述】:

这是我的数据框:

ID  max_t       min_t       diff
1.9 84904814    84904755    NA  
1.4 84905065    84905014    -310    
1.6 84905290    84905248    -276    
1.0 84906383    84906316    -1135   
2.9 82023344    82023251    2882972 
2.4 82023527    82023419    -276    
2.6 82023669    82023561    -250    
2.0 82023811    82023728    -250    

我的问题在于 diff 列。

我希望它检查范围/时间差异如下:

1.4 min_t - 1.9 max_t (84905014-84904814)
1.6 min_t - 1.4 max_t (84905248-84905065) 

....

预期输出:

   ID    max_t    min_t     diff
1 1.9 84904814 84904755      200
2 1.4 84905065 84905014      183
3 1.6 84905290 84905248     1026
4 1.0 84906383 84906316 -2883132
5 2.9 82023344 82023251       75
6 2.4 82023527 82023419       34
7 2.6 82023669 82023561       59
8 2.0 82023811 82023728       NA

这是我所做的,但它没有提供我想要的。 请告诉我在这里想念什么?

test$diff <- lag(test$min_t, 1) - test$max_t

【问题讨论】:

  • 确定@user我做到了
  • 你能解释一下你所说的“它没有为我提供我想要的”是什么意思吗?你用这段代码得到了什么?
  • @user 你可以在我的问题中看到它不应该是-310,应该是200。等等。我想也许融化会有所帮助。
  • 我误解了你的问题。下次,最好提供您的预期输出,以便其他人可以将他们的答案与您的输出进行比较。

标签: r dataframe dplyr tidyverse


【解决方案1】:

您应该使用lead 而不是lag

library(dplyr)

test %>%
  mutate(lag_min_t = lag(min_t), # For demo
         lead_min_t = lead(min_t), # For demo
         diff = lead(min_t) - max_t)

结果:

   ID    max_t    min_t     diff lag_min_t lead_min_t
1 1.9 84904814 84904755      200        NA   84905014
2 1.4 84905065 84905014      183  84904755   84905248
3 1.6 84905290 84905248     1026  84905014   84906316
4 1.0 84906383 84906316 -2883132  84905248   82023251
5 2.9 82023344 82023251       75  84906316   82023419
6 2.4 82023527 82023419       34  82023251   82023561
7 2.6 82023669 82023561       59  82023419   82023728
8 2.0 82023811 82023728       NA  82023561         NA

【讨论】:

  • 太棒了!谢谢!解决了我的问题!
【解决方案2】:

好的。我看到了。我认为您的问题是滞后不会及时向前而是向后。在您的情况下, lag(test$min_t,1) 不是从 1.9min_t 开始,而是之前的一个,它不存在。它还导致您的操作向后(差异实际上是 1.4max_t - 1.9min_t),这与您想要的相反?

您可以只减去不同位置的向量并在向量的开头添加一个 NA,而不是使用滞后:

    test$diff <- c(NA,min_t[-1] - max_t[-length(max_t)])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多