我在创建打印ggplot2使用scale_fill_gradientn.我想在缩放图例的最小值和最大值处添加文本.例如,在图例最小显示"最小"和图例最大显示"最大".有些帖子使用离散填充并添加带有数字而不是文本的标签(例如此处),但我不确定如何使用该labels功能scale_fill_gradientn仅在最小和最大时插入文本.目前我很容易出错:
Error in scale_labels.continuous(scale, breaks) :
Breaks and labels are different lengths
Run Code Online (Sandbox Code Playgroud)
这种类型的缩放/填充是否可以在ggplot2中使用此文本标签?
# The example code here produces an plot for illustrative purposes only.
# create data frame, from ggplot2 documentation
df <- expand.grid(x = 0:5, y = 0:5)
df$z <- runif(nrow(df))
#plot
ggplot(df, aes(x, y, fill = z)) + geom_raster() +
scale_fill_gradientn(colours=topo.colors(7),na.value = "transparent")
Run Code Online (Sandbox Code Playgroud) data.frame如果他们的任何成员符合条件,我有一个我想删除整个团体的地方.
在第一个示例中,如果值是数字,则条件是NA下面的代码.
df <- structure(list(world = c(1, 2, 3, 3, 2, NA, 1, 2, 3, 2), place = c(1,
1, 2, 2, 3, 3, 1, 2, 3, 1), group = c(1, 1, 1, 2, 2, 2, 3,
3, 3, 3)), .Names = c("world", "place", "group"), row.names = c(NA,
-10L), class = "data.frame")
ans <- ddply(df, . (group), summarize, code=mean(world))
ans$code[is.na(ans$code)] <- 0
ans2 <- merge(df,ans)
final.ans <- ans2[ans2$code !=0,]
Run Code Online (Sandbox Code Playgroud)
然而,这种ddply动作与NA如果条件是除"值将无法正常工作NA",或者如果值是非数字.
例如,如果我想删除任何具有 …
我想切片列表中的每个n元素,cbind切片,然后rbind切片.
我可以使用下面的代码执行此操作(n = 10个元素,列表长度为30个元素).我'手动'选择列表中的每10个元素,然后选择cbind这10个元素切片.然后我rbind那些cbinded切片.
但是,我认为可以通过l*plyin plyr或者dplyr至少其中一些来实现这一点.对于初学者,我现在不知道如何选择列表中的每个n元素,并且似乎不知道找到这个答案的适当搜索词.
dl <- list(c(2L, 1L, 3L, 2L, 1L, 1L, 3L), c(1L, 1L, 2L, 1L, 1L, 2L,
1L), c(1L, 1L, 2L, 2L, 3L, 3L, 3L), c(1L, 1L, 2L, 2L, 3L, 3L,
3L), c(1L, 1L, 2L, 2L, 3L, 3L, 3L), c(1L, 1L, 2L, 2L, 3L, 3L,
1L), c(1L, 1L, 2L, 2L, 3L, 3L, 3L), c(1L, 3L, 2L, 1L, …Run Code Online (Sandbox Code Playgroud) 我有一个data.frame df.我想使用输出from summarize作为索引来创建一个新变量,以从原始data.frame中的列中检索值.
df.l下面几列trial,location,posi,date,和value.
我想使用"的总和value== 1"为每个组(trial,location,date)作为指标,从中选择从值posi并将其存储为新的变量.
valuein df.l可以是1或0(一旦它变为零,它仍然如此,只要它正确排序,即posi0 - 1).此分组总和表示组中的值从1更改为0.
要确定索引位置,以下代码有效:
test <- df.l %>%
group_by(trial, location, date) %>%
summarise(n= sum(value==1))
Run Code Online (Sandbox Code Playgroud)
但当然posi缺少了.
我希望下面的代码可以工作,但事实并非如此.它从正确的结果开始,但在某处索引出错了.我不知道像我一样调用列是否有意义.
test <- df.l %>%
group_by(trial, location, date) %>%
summarise(n= sum(value==1)) %>%
mutate(ANS = nth(df.l$posi,n))
Run Code Online (Sandbox Code Playgroud)
使用dplyr我可以从组创建"索引"以从原始data.frame中选择一个值,然后将此变量添加到新的data.frame中吗?或者,是否有另一种方法使用dplyr来实现相同的结果?
# truncated data.frame
df.l <- structure(list(trial = c(1L, 1L, 1L, 1L, …Run Code Online (Sandbox Code Playgroud) 我有一个向量A,我希望尽可能均匀地填充值.例如,如果A是1x30并且我想使用三个值,我将使用如下代码:
% A = zeros(1,30);
A([1:10])=0;
A([11:20])=1;
A([21:30])=2;
Run Code Online (Sandbox Code Playgroud)
这有效,但对我来说似乎有点麻烦.有没有更优雅的方法来均匀(尽可能)在向量中分配指定范围的值?我打算将每个值保存在"丛"中.
提前谢谢你.
我使用lapply一次通过一个自变量对一个因变量执行几个glm回归.现在我Pr(>|z|)对每个自变量特别感兴趣.但是,我不确定如何Pr(>|z|)使用来自lapply的列表进行报告.
如果我只是在一次运行一个模型:
coef(summary(fit))[,"Pr(>|z|)"]
或
summary(fit)$coefficients[,4]
将工作(如描述在这里),但试图用类似的东西lapply似乎不工作.我可以使用lapply和glm使用访问器方法或直接从模型调用来获取p值吗?
#mtcars dataset
vars <- names(mtcars)[2:8]
fits <- lapply(vars, function(x) {glm(substitute(mpg ~ i, list(i = as.name(x))), family=binomial, data = mtcars)})
lapply(fits,summary) # this works
lapply(fits, coefficients) # this works
#lapply(fits, summary(fits)$coefficients[,4])# this for example does not work
Run Code Online (Sandbox Code Playgroud) 我试图使用grobs和gtable将4(ggplot2)图排列成2x2网格.我不知道如何设置宽度,也不知道非1xn或nx1排列.
使用此代码:
data(iris)
a <- ggplot(iris, aes(x=Species, y=Petal.Width)) + geom_boxplot(color="black") + ylab(expression(Foo~Bar~(g~cm^{-3})))
b <- ggplot(iris, aes(x=Species, y=Petal.Length*100)) + geom_boxplot(color="black") + ylab("foobar (mm)")
c <- ggplot(iris, aes(x=Species, y=Sepal.Width)) + geom_boxplot(color="black") + ylab("foobar (%)")
d <- ggplot(iris, aes(x=Species, y=log10(Sepal.Length))) + geom_boxplot(color="black") + ylab("foobar (cm)")
plots <- list(a,b,c,d)
grobs = lapply(plots, ggplotGrob)
g = do.call(rbind, c(grobs, size="first"))
g$widths = do.call(unit.pmax, lapply(grobs, "[[", "widths"))
grid.newpage()
grid.draw(g)
Run Code Online (Sandbox Code Playgroud)
如果我将grid.arrange用于两列,则在4个图上,这些图的宽度不同.
如何将图表绑定到4 x 4排列的gtable中?
# I thought maybe I could cbind, then rbind, but this does not …Run Code Online (Sandbox Code Playgroud) 我想知道是否有一种更简洁的方法来替换NA数据帧中变量的值,而不是我在下面所做的.下面的代码似乎比我认为在R中可能的更长.例如,我不知道某些软件包/工具可能更简洁地做到这一点.
有没有办法替换或合并值只有它们NA?在使用all.x = T我有一些NA值合并两个数据帧之后,我想使用公共变量替换来自另一个数据帧的信息来链接替换.
# get dataframes
breaks <- structure(list(Break = 1:11, Value = c(2L, 13L, 7L, 9L, 40L,
21L, 10L, 37L, 7L, 26L, 42L)), .Names = c("Break", "Value"), class = "data.frame", row.names = c(NA,
-11L))
fsites <- structure(list(Site = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 3L, 3L), Plot = c(0L, 1L, 2L, 3L, 4L, 0L, 1L, 2L, 0L,
1L, 2L, 3L, 4L, 5L), Break = …Run Code Online (Sandbox Code Playgroud) 我有一个矩阵A.
A = [0 0 0 0 1; 0 0 0 0 2; 0 1 2 3 4];
Run Code Online (Sandbox Code Playgroud)
我想随机置换每一行中的元素.例如,矩阵A2
A2 = [1 0 0 0 0; 0 0 0 2 0; 4 1 3 2 0]; % example of desired output
Run Code Online (Sandbox Code Playgroud)
我可以用矢量做到这一点:
Av = [0 1 2 3 4];
Bv = Av(randperm(5));
Run Code Online (Sandbox Code Playgroud)
但我不确定如何在矩阵中连续执行此操作,并且仅对给定行中的元素进行置换.这可能吗?我可以从许多置换向量构造一个矩阵,但我宁愿不这样做.
谢谢.
我将一个csv导入R,它认为我的变量FERNH是一个因素; 事实并非如此.我无法弄清楚为什么或如何解决它.我已经检查了FERNH中的值,它们看起来是正确的并且与其他8个变量一致.请指教.
str(height)
'data.frame': 512 obs. of 9 variables:
$ DSH : int 50 4 35 10 12 0 0 30 0 0 ...
$ ESH : int 0 0 0 0 0 30 80 10 8 15 ...
$ ETH : int 0 0 0 0 0 0 0 0 0 0 ...
$ CANEH : int 0 0 40 15 0 0 0 0 0 0 ...
$ HERBH : int 0 0 0 0 0 0 5 …Run Code Online (Sandbox Code Playgroud) 我有一个data.frame包含几个列(即V1... Vn+1),其值为1或0,每列是一个时间步长.
我想知道time值1之间的平均值(列数).序列的1 1 1 1 1 1值为1.
目前我可以想到计算这个的方法是计算1s之间0的平均计数(+1),但它是有缺陷的.
例如,具有这些值的1 0 0 1 0 1行将具有结果2.5(2 + 1= 3; 3/2= 1.5; 1.5+ 1= 2.5).
但是,如果序列以0开始或结束,则应在没有它们的情况下计算此结果的结果.例如,0 1 0 0 1 1将按照1 0 0 1 1结果计算3.
有缺陷的例如1 0 1 1 0 0将被计算为1 0 1 1结果2,但这不是期望的结果(1.5) …
在MATLAB(或更一般地说)中,如果我只想要发生某些事情,例如,每50次迭代for loop我怎么能比下面更好?那就是不写出每个可能的+50值.谢谢.
for i = 1:1060;
if i = 50 || 100 || 150 || ... || 1050
randi(i); % for example, just do something
end;
end;
Run Code Online (Sandbox Code Playgroud) 我使用下面的代码将数据集拆分为两个,并在每一半上执行类似的操作.然后将这两个结果合并在一起.我知道我可能正在描述split-apply-combine框架,但我无法想到如何简化下面的代码.
数据集有4个要更新的变量.4个变量中的每一个都有一个公式来计算新值,每半个公式有不同的公式,共计8个公式.
下面的代码可能会通过某种程度的矢量化来改进吗?它似乎比必要的更冗长.我不确定如何为每个分割半部执行不同的操作(即使用不同的公式),除了下面的方法.
data <- structure(list(site = c(1L, 1L, 1L, 1L, 1L, 1L), plot = 1:6,
C = c(40L, 30L, 10L, 5L, 0L, 0L), E = c(0L, 0L, 0L, 10L,
20L, 45L), M = c(0L, 0L, 0L, 0L, 0L, 10L), P = c(1000L, 900L,
800L, 500L, 200L, 50L), FF = c(1L, 1L, 1L, 0L, 0L, 0L)), .Names = c("site",
"plot", "C", "E", "M", "P", "FF"), class = "data.frame", row.names = c(NA,
-6L))
df1 <- data[data$FF == 1,]
df0 <- data[data$FF …Run Code Online (Sandbox Code Playgroud)