我有一个包含四个变量的示例数据框,我正在尝试将h变量映射到fill并将s变量映射到shape. 由于我的s变量只能采用两个值(“f”或“u”),我想使用geom_point24 和 21,它们可以采用fill和colour参数。
library(ggplot2)
h <- c(1,2,3,4,5)
x <- seq(1:5)
y <- c(1,3,3,5,5)
s <- c(rep('f',3),rep('u',2))
dt <- data.frame(h,x,y,s)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我的geom_point轮廓是黑色的,并且是彩色的fill。我可以用下面的代码绘制它,它会生成这个图:
ggplot(dt, aes(x=y, y=x)) +
geom_point(mapping = aes(fill = factor(h), shape = s), size = 5) +
scale_shape_manual(values = c(24, 21))
Run Code Online (Sandbox Code Playgroud)

我无法让图例显示彩色键,因为图例键的颜色映射到colournot fill。
geom_point如果我将我的值更改为 19 和 17 并映射我的h变量,我可以拥有彩色图例键colour:
ggplot(dt, aes(x=y, y=x)) + …Run Code Online (Sandbox Code Playgroud) 我认为这已被多次询问,但我找不到合适的词来找到可行的解决方案。
如何spread()基于多个值的多个键的数据框?
一个简化的(我有更多的列要传播,但只有两个键:Id和time给定测量的点)我正在处理的数据如下所示:
df <- data.frame(id = rep(seq(1:10),3),
time = rep(1:3, each=10),
x = rnorm(n=30),
y = rnorm(n=30))
> head(df)
id time x y
1 1 1 -2.62671241 0.01669755
2 2 1 -1.69862885 0.24992634
3 3 1 1.01820778 -1.04754037
4 4 1 0.97561596 0.35216040
5 5 1 0.60367158 -0.78066767
6 6 1 -0.03761868 1.08173157
> tail(df)
id time x y
25 5 3 0.03621258 -1.1134368
26 6 3 -0.25900538 1.6009824
27 7 3 0.13996626 …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种有效的方式进行以下转换:
输入示例:
ob <- list(a = 2, b = 3)
Run Code Online (Sandbox Code Playgroud)
预期产量:
key value
1 a 2
2 b 3
Run Code Online (Sandbox Code Playgroud)
当前(详细)解决方案:
data.frame(key = names(ob), value = unlist(ob, use.names = FALSE))
Run Code Online (Sandbox Code Playgroud) 这是我拥有的数据: 在此处输入图像描述
假设我有一个名为 df 的变量中的数据框,如果我执行 df.hist(),它将为数据框中的每个类别显示一个直方图,但我只想为从类别 1 到类别 1 的每个类别显示一个直方图5. 我该怎么做?
我想根据某些条件递归地修改列表的值。
mylist = list(a = "test1",
b = list(bb = "test2", list(bbb = "test1")),
c = "test2")
Run Code Online (Sandbox Code Playgroud)
我想修改值为test1的值,并将其替换在此列表中或创建一个新列表。例如,如果修改是将test1替换为best1,则结果列表应为
mylist = list(a = "best1",
b = list(bb = "test2", list(bbb = "best1")),
c = "test2")
Run Code Online (Sandbox Code Playgroud)
在R中最干净的方法是什么?
我正在尝试绘制一个既涉及geom_point()函数又涉及函数的geom_smooth()图形。
我想geom_smooth()在某个 x 值处裁剪函数,但仅在其所有值都已用于计算平滑曲线之后(即我不想使用xlim(),这将删除用于绘图的值)。
可重现的例子:
library(dplyr)
library(ggplot2)
set.seed(42)
test <- data.frame(replicate(2,sample(0:10,100,rep=TRUE)))
g <- ggplot() + geom_point(data = test, aes(x = X1, y = X2))
t_i <- test
t_i$group <- as.factor(as.numeric(cut(t_i$X1, 25)))
summar_t <- t_i %>%
group_by(group) %>%
summarise(y_mean=mean(X2),
y_sd=sd(X2),
c_mean =mean(X1,na.rm=T),
n =n()
)
summar_t$t_2sd <- summar_t$y_mean + summar_t$y_sd*2
g2 <- g + geom_smooth(data = summar_t, aes(x=c_mean, y = t_2sd), se=FALSE, method = lm, formula=y~poly(x,2), color = "black", linetype=3)
Run Code Online (Sandbox Code Playgroud)
我有一个数据框列表,我想x从每个数据框中获取列作为字符串。
testing <- list(data.frame(A = "Yes", B = "No"),
data.frame(B = "No", C = "No"),
data.frame(A = "Yes"))
Run Code Online (Sandbox Code Playgroud)
我可以打印哪些数据帧中有colnameA,但我无法连接到子集原始测试
lapply(testing, function(x) "A" %in% colnames(x))
Run Code Online (Sandbox Code Playgroud)
[[1]]
A B
1 Yes No
[[2]]
A
1 Yes
Run Code Online (Sandbox Code Playgroud) 该函数需要计数数和使用频率(输入 - 矢量,输出 - 矩阵).(我知道,我怎么能这样做更容易,但我想了解错误).问题是函数在向量中忽略1.
count_elements <- function(x) {
y <- sort(x)
m <- matrix(, nrow = 2, ncol = length(unique(x)))
a <- 1
for (i in 1:length(sort(x))) {
if(is.element(y[i], m)) {
} else {
(m[1, a] <- y[i]) & (m[2, a] <- sum(y == y[i])) & (a <- a+1) }
}
m
}
Run Code Online (Sandbox Code Playgroud)
示例输入和输出:
在向量中没有1
x <- c(2:10, 2, 3:7, -1)
count_elements(x)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,] -1 2 3 4 5 …Run Code Online (Sandbox Code Playgroud) vDF <- data.frame(v = rnorm(50,1,40))
g <- ggplot(vDF, aes(x = vDF)) + geom_histogram()
ggsave(g, file="name.eps")
Run Code Online (Sandbox Code Playgroud)
我不断收到错误消息
grDevices::postscript(..., onefile = FALSE, Horizontal = FALSE, 中的错误:无法打开文件“name.eps”
为什么我不能完成这个工作?我看到建议说‘嘿,就做...
setEPS()
postscript("whatever.eps")
plot(rnorm(100), main="Hey Some Data")
dev.off()
Run Code Online (Sandbox Code Playgroud)
但我什至无法首先保存原始 .eps 文件。
我有一个来自大量 csv 文件的 df 。当前的列名称具有其名称的占位符。有没有办法使每列的名称成为数据的一部分。整个列的字符串将相同。我会手动更改名称,但有 256 列。
开始 df:
col2 col3 col4 ...
1 version=1 numCh=10 reserved=0
2 version=1 numCh=10 reserved=0
3 version=1 numCh=11 reserved=0
4 version=1 numCh=11 reserved=0
...
Run Code Online (Sandbox Code Playgroud)
所需的输出:
version numCh reserved ...
1 1 10 0
2 1 10 0
3 1 11 0
4 1 11 0
...
Run Code Online (Sandbox Code Playgroud)
一直在尝试不同的方法,看看其他人是否创造了类似的东西。