【发布时间】:2020-08-20 09:57:13
【问题描述】:
假设我有如下数据框:
df <- structure(list(
name = c("A", "A", "A", "A", "B", "B", "B", "B"),
val = c(100, 200, 300, 400, 0.15, 0.22, 0.31, 0.48)),
.typeOf = c("factor", "numeric"),
row.names = c(NA, -8L),
class = "data.frame")
我想在条形图上使用线图来可视化数据。但是,您可能会看到数据具有不同的比例,因此我无法正常可视化它们。我需要分别从数据框中引入第二个 Y 轴并重新调整对象“B”的值。为此,我使用以下代码:
df %>%
{
assign("scaleFactor", ifelse(max(.[.$name == "A",2], na.rm = T) > max(.[.$name == "B",2], na.rm = T),
max(.[.$name == "A",2], na.rm = T) / max(.[.$name == "B",2], na.rm = T),
max(.[.$name == "B",2], na.rm = T) / max(.[.$name == "A",2], na.rm = T)),
envir = baseenv())
. } %>%
mutate(val = ifelse(max(.[.$name == "A 1",2], na.rm = T) > max(.[.$name == "B",4], na.rm = T),
.[.$name == "B",2] <- .[.$name == "B",2] * scaleFactor,
.[.$name == "A",2] <- .[.$name == "B",2] * scaleFactor))
首先我需要计算比例因子。它工作正常。然后我需要按比例因子对对象“B”的多个值。在这里我有一个问题。它返回只有一个重复值的第二列。似乎在这种情况下 ifelse 条件不能用作矢量化函数。
但是,如果我在管道/变异之外使用 ifelse 条件,它会起作用。
ifelse(max(df[df$name == "A",2], na.rm = T) > max(df[df$name == "B",2], na.rm = T),
df[df$name == "B",2] <- df[df$name == "B",2] * scaleFactor,
df[df$name == "A",2] <- df[df$name == "A",2] * scaleFactor)
任何想法如何使用管道中的 ifelse 条件修改/乘以某些值?
【问题讨论】:
标签: r