有很多方法可以定义ggplot2. 加载后,ggplot2我计算以(或)22开头的函数以及以 开头的相同数字。能否简单说明一下下面这些函数的用途?特别是我对某些功能的差异以及何时使用它们感到困惑。scale_color_*scale_colour_*scale_fill_*
我尝试过的
我尝试在网上进行一些研究,但读得越多,我就越感到困惑。删除一些随机示例:“连续填充比例的默认比例是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 …
我需要访问 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),这里不起作用。
我有一个只有三个单词的字符串,如下所示:
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
我有一个像这样的数字向量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
我对这个看似简单的任务感到失望:我有一个数字向量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) 我用 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) 问题
我需要检查一个对象是否存在于函数内部而不是其他地方。我怎样才能做到这一点?
为了弄清楚我的意思我使用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) 我有一个包含多个列的数据框,其中包含一个诊断的信息。条目是TRUE,FALSE或NA。我创建了一个向量,将这些列总结如下:如果患者在某个时间 ( 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) 我有一个数据框,其中包含在时间点 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)