小编Lul*_*ulY的帖子

了解 ggplot2 中的色阶

有很多方法可以定义ggplot2. 加载后,ggplot2我计算以(或)22开头的函数以及以 开头的相同数字。能否简单说明一下下面这些函数的用途?特别是我对某些功能的差异以及何时使用它们感到困惑。scale_color_*scale_colour_*scale_fill_*

  • 缩放_*_binned()
  • 规模_*_brewer()
  • 缩放_*_连续()
  • 比例_*_日期()
  • 比例_*_日期时间()
  • 尺度_*_离散()
  • 规模_*_distiller()
  • 规模_*_发酵机()
  • 缩放_*_梯度()
  • 缩放_*_gradient2()
  • 缩放_*_gradientn()
  • 比例_*_灰色()
  • 比例_*_色调()
  • 规模_*_身份()
  • 缩放_*_手动()
  • 比例_*_序数()
  • 缩放_*_steps()
  • 缩放_*_steps2()
  • 缩放_*_stepsn()
  • 缩放_*_viridis_b()
  • 缩放_*_viridis_c()
  • 缩放_*_viridis_d()

我尝试过的

我尝试在网上进行一些研究,但读得越多,我就越感到困惑。删除一些随机示例:“连续填充比例的默认比例是scale_fill_continuous(),而默认比例为scale_fill_gradient()。我不明白这两个功能有什么区别。再次强调,这只是一个例子。scale_color_binned()对于和来说也是如此,scale_color_discrete()我无法说出其中的区别。scale_color_date()在这种情况下,scale_color_datetime()destription 会说“scale_*_gradient创建一个两种颜色渐变(低-高),scale_*_gradient2创建一个发散的颜色渐变(低-中-高),scale_*_gradientn创建一个 n 颜色渐变。” 很高兴知道,但这与scale_color_date()和有何关系scale_color_datetime()?在网络上寻找这些功能也没有给我提供非常丰富的信息来源。关于这个主题的阅读也会变得混乱,因为不同的软件包中有大量的调色板,这些调色板是连续的/发散的/定性的,而且可以以不同的方式设置相同的颜色,即通过颜色名称、RGB、数字、十六进制代码或调色板名称。在某种程度上,这与有关功能的问题没有直接关系2*22,但在某些情况下,这是因为提供“错误”的调色板会导致错误(例如 error "Continuous value supplied to discrete scale)。

为什么我问这个

I need to …

r ggplot2

28
推荐指数
1
解决办法
2万
查看次数

如何访问不同深度嵌套列表中的第一个对象?

我需要访问 a 的第一个元素list。问题在于列表的嵌套深度不同。这是一个例子:

list1 <- list(ts(1:100),
              list(1:19,
                   factor(letters)))

list2 <- list(list(list(ts(1:100), data.frame(a= rnorm(100))),
                   matrix(rnorm(10))),
              NA)
Run Code Online (Sandbox Code Playgroud)

我的预期输出是获取ts(1:100)两个列表的时间序列,即list1[[1]]list2[[1]][[1]][[1]]。我尝试过不同的东西,其中包括lapply(list2, `[[`, 1),这里不起作用。

select r list nested-lists

16
推荐指数
3
解决办法
1460
查看次数

查找单词中重叠的字母

我有一个只有三个单词的字符串,如下所示:

first_string <- c("self", "funny", "nymph")
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这个向量的单词可以全部组合成一个单词,因为字母中有一些重叠,即我们得到 self fun un ny mph。我们称其为单词列车。

此外,我还有另一个包含很多单词的向量。设第二个向量为:

second_string <- c("house", "garden", "duck", "evil", "fluff")
Run Code Online (Sandbox Code Playgroud)

我想知道第二个字符串的哪些单词可以添加到单词序列中。在这种情况下,这是houseand fluff(可以添加在 self fun ny mphhouse的末尾并且可以放在and之间)。所以这里的预期输出是:fluffselffunny

expected <- data.frame(word= c("house", "fluff"), word_train= c("selfunnymphouse", "selfluffunnymph"))
Run Code Online (Sandbox Code Playgroud)

重叠可以是任意长度,即自我和滑稽仅与一个角色重叠,但滑稽和若虫在两个角色中重叠。

编辑

新词可以改变第一个词串的词序。例如,如果第二个向量包含单词,hugs我们可以将单词 train nymp h ug s el funny放在和nymph之前。selffunny

string combinations r character overlap

10
推荐指数
1
解决办法
592
查看次数

按预定义的最大组和对数值向量进行分组

我有一个像这样的数字向量x <- c(1, 23, 7, 10, 9, 2, 4),我想从左到右对元素进行分组,并限制每个组的总和不得超过25。因此,这里第一组是c(1, 23),第二组是c(7, 10),最后一组是c(9, 2, 4)。预期输出是一个数据框,第二列包含组:

data.frame(x= c(1, 23,  7,  10,  9,  2,  4), group= c(1, 1, 2, 2, 3, 3, 3))
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的方法,但一旦达到最后一组cumsum的限制总和,我就无法为新组动态重新启动累积和。25

grouping r vector cumulative-sum cumsum

9
推荐指数
5
解决办法
520
查看次数

如何找出一个数字超出范围的时间?

我对这个看似简单的任务感到失望:我有一个数字向量values和一个时间向量time,我需要找出这些值在一定范围内的时间。这是一些数据:

df <- data.frame(time= c(1,3:10), values= c(7,3:10))
Run Code Online (Sandbox Code Playgroud)

对于此数据,4.5 小时的值超出了 3.5 至 6.5 的范围。下面是如何确定这 4.5 小时的可视化:

阴谋

在此图中,x 轴是时间,y 轴是值,实际测量的点,虚线是范围边界 3.5 和 6.5,实线只是帮助更好地查看何时跨越范围边界。

我是否缺少一种明显的方法来确定值超出范围的时间有多长?


该情节是用创建的

threshold_low <- 3.5
threshold_high <- 6.5

ggplot(data= df, mapping= aes(time, values)) +
  geom_point() +
  geom_line() +
  geom_hline(yintercept= c(threshold_low, threshold_high), linetype= "dashed") +
  scale_x_continuous(breaks=seq(0, 10, 1)) +
  scale_y_continuous(breaks=seq(0, 10, 1))
Run Code Online (Sandbox Code Playgroud)

time r range ggplot2

5
推荐指数
2
解决办法
121
查看次数

更改 ggplot 中的图例标题会改变显示的图例美感

我用 ggplot2 画了一些图,如下所示:

library(ggplot2)
ggplot(df, aes(x, y, col= col)) +
  geom_point()
Run Code Online (Sandbox Code Playgroud)

好的

一切都很好,但是一旦我设置了另一个图例标题(如此处所示)连续颜色渐变就会更改为图例中的某些点:

library(ggplot2)
ggplot(df, aes(x, y, col= col)) +
  geom_point() +
  guides(col= guide_legend(title= "Some title"))
Run Code Online (Sandbox Code Playgroud)

为什么

我怎样才能只改变标题而不改变传说中的东方?

这里使用的数据:

df <- data.frame(x= 1:10, y= 1:10, col= rnorm(10))
Run Code Online (Sandbox Code Playgroud)

r legend ggplot2

4
推荐指数
1
解决办法
7902
查看次数

R: 如何检查函数内部是否存在对象?

问题

我需要检查一个对象是否存在于函数内部而不是其他地方。我怎样才能做到这一点?

为了弄清楚我的意思我使用exists

fun <- function(){exists("x")}
x <- 1
fun()
> TRUE
Run Code Online (Sandbox Code Playgroud)

我对上面代码的预期输出是FALSE因为该变量x是在函数外部创建的。sox保存在全局环境中,这就是函数返回的原因TRUE,但我们可以以某种方式测试是否xin吗"function environment"


我试过了

我发现对我的情况也不起作用。他们建议使用

library(rlang)

f1 <- function(x){ 
  arg <- quo_name(enquo(x))
  if(exists(arg, where = .GlobalEnv)){
    return(2*x)
  } else {
    cat('variable ', '`', arg, '`', ' does not exist', sep = "")
  }
}
Run Code Online (Sandbox Code Playgroud)

我期望输出适用于以下两种情况,但如果之前在函数外部定义,variable x does not exist则情况并非如此:x

x <- 1
f1(x)
> …
Run Code Online (Sandbox Code Playgroud)

r function exists object

3
推荐指数
1
解决办法
679
查看次数

高效地按行应用函数

我有一个包含多个列的数据框,其中包含一个诊断的信息。条目是TRUE,FALSENA。我创建了一个向量,将这些列总结如下:如果患者在某个时间 ( TRUE) 被诊断出来,则TRUE,如果唯一有效的条目是FALSE,则FALSE,如果只是缺失,则NA。将文本写成代码:

data.frame(a= c(FALSE, TRUE, NA, FALSE, TRUE, NA, FALSE, TRUE, NA),
           b= c(FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, NA, NA, NA),
           expected= c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, NA))
Run Code Online (Sandbox Code Playgroud)

我需要按行遍历所有列,并且使用split. 不幸的是,我的数据很大,需要很长时间。我现在所做的是

library(magrittr)
# big example data
df <- expand.grid(c(FALSE, TRUE, NA), c(FALSE, TRUE, NA)) %>%
  .[rep(1:nrow(.), 50000), ] %>%
  as.data.frame() %>%
  setNames(., nm= c("a", "b"))

# My approach …
Run Code Online (Sandbox Code Playgroud)

r logical-operators dataframe rowwise

3
推荐指数
2
解决办法
232
查看次数

查找每行的最后一个非缺失值

我有一个数据框,其中包含在时间点 0 到 2 测量的变量var。如下所示:

df <- data.frame(id= letters[1:5],
                 var0= c(1:3, NA, 5),
                 var1= c(11, NA, NA, 14:15),
                 var2= c(NA, NA, NA, NA, 25))
df
  id var0 var1 var2
1  a    1   11   NA
2  b    2   NA   NA
3  c    3   NA   NA
4  d   NA   14   NA
5  e    5   15   25
Run Code Online (Sandbox Code Playgroud)

对于每一行,即对于每个人,我想保留最新的非缺失值。所以期望的输出是:

  id var0 var1 var2 last_val
1  a    1   11   NA       11
2  b    2   NA   NA        2
3  c    3   NA   NA        3 …
Run Code Online (Sandbox Code Playgroud)

r dplyr rowwise

3
推荐指数
2
解决办法
119
查看次数