清理 tibble 数据框,其中一些值是没有循环的向量
Cleaning tibble data frame where some values are vectors without a loop
美好的一天,
我有一个包含两列的 table 数据框,其中给定单元格中的一些条目是形式为 c(x1, x2, ...) 的向量。从第 1 列中,我想提取该单元格的向量的 maximum 值,然后从第 2 列 return 中提取与该列中最大值位置关联的值1.
我有以下显示数据示例的屏幕截图:
在第一行第一列中,最大值为 7654.28,这是向量的第一个元素,所以我需要 return 第 2 列的第一个元素,即 152。
在第三行,第一列,最大值是 7658.12,这是向量的第二个元素,所以我需要 return 第 2 列的第二个元素,即 435。
因此,最终结果输出应该是:
7654.28 | 152
NULL | NULL
7658.12 | 435
我想在没有循环的情况下实现这一点,因为数据集非常大,这将花费很长时间。
所以你们可以做一些事情来让这个问题更容易一起解决。
- 做一个可重现的问题。
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),NA,c(983,435,1000)))
意识到 list-columns 有点不同,使用 rowwise 很有帮助。否则,您的操作将在列上和下进行,而不是在行上进行。
理解 match(它给你一个值在向量中的索引)和 nth(它给你向量的第 n 个值。
那么你有
result<-df %>%
rowwise() %>%
mutate(max_v1=max(v1),value_v2_at_pos_max_v1=nth(v2,match(max(v1),v1)))
美好的一天,
我有一个包含两列的 table 数据框,其中给定单元格中的一些条目是形式为 c(x1, x2, ...) 的向量。从第 1 列中,我想提取该单元格的向量的 maximum 值,然后从第 2 列 return 中提取与该列中最大值位置关联的值1.
我有以下显示数据示例的屏幕截图:
在第一行第一列中,最大值为 7654.28,这是向量的第一个元素,所以我需要 return 第 2 列的第一个元素,即 152。
在第三行,第一列,最大值是 7658.12,这是向量的第二个元素,所以我需要 return 第 2 列的第二个元素,即 435。
因此,最终结果输出应该是:
7654.28 | 152
NULL | NULL
7658.12 | 435
我想在没有循环的情况下实现这一点,因为数据集非常大,这将花费很长时间。
所以你们可以做一些事情来让这个问题更容易一起解决。
- 做一个可重现的问题。
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),NA,c(983,435,1000)))
意识到 list-columns 有点不同,使用 rowwise 很有帮助。否则,您的操作将在列上和下进行,而不是在行上进行。
理解 match(它给你一个值在向量中的索引)和 nth(它给你向量的第 n 个值。
那么你有
result<-df %>%
rowwise() %>%
mutate(max_v1=max(v1),value_v2_at_pos_max_v1=nth(v2,match(max(v1),v1)))