【问题标题】:R add column for sparkline with value from each row vectorR为迷你图添加列,每个行向量的值
【发布时间】:2018-06-18 12:20:12
【问题描述】:

从数据框开始

library(dplyr)
library(sparkline)
df <- data.frame(matrix(1:9, nrow = 3, ncol = 3))

   X1 X2 X3
1  1  4  7
2  2  5  8
3  3  6  9

想要添加一列“火花”以用于迷你图:

df <- df %>% mutate(spark = spk_chr(values = ?, type = "bar", elementId = X1))

所以问号 (?) 将被替换为由每行 df 组成的向量。

对于第一行? = c(1, 4, 7),第一行的值spark = spk(values = c(1, 4, 7)...)

我知道如何从任意行中提取一个向量,第一行向量是unlist(df[1,]),但不明白这是否可以用于mutate。

【问题讨论】:

  • df %&gt;% mutate(spark = spk_chr(values = c(X1, X2, X3), type = "bar", elementId = X1))?
  • @Axeman 这不起作用 - 它为每一行提供了相同的值。尝试了 Vectorize(spk_chr),这改变了 elementId,但是每一行的值都不正确。
  • 我不太确定您的目标是什么。如何为每一行绘制一个条形图,每行包含三个单独的元素?您要绘制总和吗?
  • @RonakShah - 根据您的建议,我创建了一列连接每行值的字符串。然后在 spk_chr 的 values 参数中使用 strsplit。这行得通。不确定是否有更直接的方法来避免字符串中间阶段。

标签: r sparklines


【解决方案1】:

使用 Ronak 的建议创建中间列:

cols = names(df)
df$y <- apply(df[,cols], 1, paste, collapse = "-")

然后创建向量化的spk_chr:

sparky <- Vectorize(sparkline::spk_chr)

用于制作火花柱:

df <- df %>% mutate(spark = sparky(strsplit(y, split="-"), type = "bar", elementId = X1))

【讨论】:

    猜你喜欢
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多