清洁小节数据帧,其中某些值是不带循环的矢量

问题描述

美好的一天,

我有一个具有两列的表数据帧,其中给定单元格中的某些条目是形式为c(x1,x2,...)的向量。我想从第1列中提取该单元格的向量的 maximum 值,然后从第2列中返回与第1列中该最大值的位置相关的值。

下面的屏幕快照显示了数据示例:

enter image description here

在第一行的第一列中,最大值为7654.28,这是向量的第一个元素,因此我需要从第二列中返回第一个元素152。

在第三行第一列中,最大值为7658.12,这是向量的第二个元素,因此我需要从第二列中返回第二个元素435。

因此,最终结果输出应为:

7654.28 | 152
NULL | NULL
7658.12 | 435

我想不带循环地实现这一点,因为数据集非常大,而且这将永远花费。

非常感谢!

解决方法

因此,您可以做一些事情来使它们更容易一起解决。

  1. 出现可重现的问题。
df <- data.frame(a=1:3)
df$v1<-list(c(7654.28,7651.4),NA,c(7652.36,7658.12,7653.32))
df$v2<-(list(c(152,944),c(983,435,1000)))
  1. 意识到列表列有些不同,因此使用逐行操作会有所帮助。否则,您的操作将在列中上下移动,而不是在行中上下移动。

  2. 理解匹配(为您提供向量中值的索引)和nth(为您提供向量中的第n个值)。

那么你就有了

result<-df %>%    
  rowwise() %>%
  mutate(max_v1=max(v1),value_v2_at_pos_max_v1=nth(v2,match(max(v1),v1)))