我试图制作一个条形图,其中最大的条最接近y轴,最短的条最远.所以这有点像我的表
Name Position
1 James Goalkeeper
2 Frank Goalkeeper
3 Jean Defense
4 Steve Defense
5 John Defense
6 Tim Striker
Run Code Online (Sandbox Code Playgroud)
所以我正在尝试建立一个条形图,根据位置显示玩家数量
p <- ggplot(theTable, aes(x = Position)) + geom_bar(binwidth = 1)
Run Code Online (Sandbox Code Playgroud)
但是图表显示守门员杆然后是防守,最后是前锋一个.我希望图表被排序,以便防守栏最接近y轴,守门员一个,最后是前锋一个.谢谢
如何更改此输入(使用序列:time,in,out,files):
Time In Out Files
1 2 3 4
2 3 4 5
Run Code Online (Sandbox Code Playgroud)
到这个输出(顺序:时间,输出,文件)?
Time Out In Files
1 3 2 4
2 4 3 5
Run Code Online (Sandbox Code Playgroud)
这是虚拟R数据:
table <- data.frame(Time=c(1,2), In=c(2,3), Out=c(3,4), Files=c(4,5))
table
## Time In Out Files
##1 1 2 3 4
##2 2 3 4 5
Run Code Online (Sandbox Code Playgroud) 我很想知道R是否可以使用它的eval()功能来执行例如字符串提供的计算.
这是一个常见的情况:
eval("5+5")
Run Code Online (Sandbox Code Playgroud)
但是,而不是10我得到:
[1] "5+5"
Run Code Online (Sandbox Code Playgroud)
有解决方案吗
以下代码显然是错误的.有什么问题?
i <- 0.1
i <- i + 0.05
i
## [1] 0.15
if(i==0.15) cat("i equals 0.15") else cat("i does not equal 0.15")
## i does not equal 0.15
Run Code Online (Sandbox Code Playgroud) 我正在尝试确定字符串是否是另一个字符串的子集.例如:
chars <- "test"
value <- "es"
Run Code Online (Sandbox Code Playgroud)
如果"value"作为字符串"chars"的一部分出现,我想返回TRUE.在以下场景中,我想返回false:
chars <- "test"
value <- "et"
Run Code Online (Sandbox Code Playgroud) 我无法重新排列以下数据框:
set.seed(45)
dat1 <- data.frame(
name = rep(c("firstName", "secondName"), each=4),
numbers = rep(1:4, 2),
value = rnorm(8)
)
dat1
name numbers value
1 firstName 1 0.3407997
2 firstName 2 -0.7033403
3 firstName 3 -0.3795377
4 firstName 4 -0.7460474
5 secondName 1 -0.8981073
6 secondName 2 -0.3347941
7 secondName 3 -0.5013782
8 secondName 4 -0.1745357
Run Code Online (Sandbox Code Playgroud)
我想重塑它,以便每个唯一的"名称"变量是一个rowname,其中"值"作为沿该行的观察值,"数字"作为同名.有点像:
name 1 2 3 4
1 firstName 0.3407997 -0.7033403 -0.3795377 -0.7460474
5 secondName -0.8981073 -0.3347941 -0.5013782 -0.1745357
Run Code Online (Sandbox Code Playgroud)
我看melt,并cast和其他一些东西,但没有人可以做的工作.
如果我有一个字符类型的向量,我如何将值连接成字符串?这是我用paste()做的方法:
sdata = c('a', 'b', 'c')
paste(sdata[1], sdata[2], sdata[3], sep ='')
Run Code Online (Sandbox Code Playgroud)
屈服"abc".
但是,当然,这只有在我提前了解sdata的长度时才有效.
我有一个数字,例如1.128347132904321674821,我想在输出到屏幕(或写入文件)时只显示两位小数.怎么做到这一点?
x <- 1.128347132904321674821
Run Code Online (Sandbox Code Playgroud)
编辑:
指某东西的用途:
options(digits=2)
Run Code Online (Sandbox Code Playgroud)
已被建议作为可能的答案.有没有办法在脚本中指定一次性使用?当我将它添加到我的脚本时,它似乎没有做任何不同的事情,我对很多重新键入格式化每个数字感兴趣(我正在自动化一个非常大的报告).
-
答案:round(x,digits = 2)
我有一个名为的脚本foo.R包含另一个脚本other.R,该脚本位于同一目录中:
#!/usr/bin/env Rscript
message("Hello")
source("other.R")
Run Code Online (Sandbox Code Playgroud)
但我想R发现other.R无论当前的工作目录是什么.
换句话说,foo.R需要知道自己的路径.我怎样才能做到这一点?
我有一个我要合并的许多data.frames的列表.这里的问题是每个data.frame在行数和列数方面都不同,但它们都共享关键变量(我已经调用过"var1","var2"在下面的代码中).如果data.frames在列方面是相同的,我只能rbind,plyr的rbind.fill可以完成这项工作,但这些数据并非如此.
因为该merge命令仅适用于2个data.frames,所以我转向Internet寻求创意.我从这里得到了这个,它在R 2.7.2中完美运行,这是我当时所拥有的:
merge.rec <- function(.list, ...){
if(length(.list)==1) return(.list[[1]])
Recall(c(list(merge(.list[[1]], .list[[2]], ...)), .list[-(1:2)]), ...)
}
Run Code Online (Sandbox Code Playgroud)
我会像这样调用函数:
df <- merge.rec(my.list, by.x = c("var1", "var2"),
by.y = c("var1", "var2"), all = T, suffixes=c("", ""))
Run Code Online (Sandbox Code Playgroud)
但是在2.7.2之后的任何R版本中,包括2.11和2.12,此代码失败并出现以下错误:
Error in match.names(clabs, names(xi)) :
names do not match previous names
Run Code Online (Sandbox Code Playgroud)
(很明显,我在其他地方看到了其他对此错误的引用而没有解决方案).
有什么方法可以解决这个问题吗?