标签: r-faq

ggplot2条形图中的订单栏

我试图制作一个条形图,其中最大的条最接近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轴,守门员一个,最后是前锋一个.谢谢

r ggplot2 r-faq

283
推荐指数
12
解决办法
29万
查看次数

如何重新排序数据框中的列?

如何更改此输入(使用序列: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)

sorting r dataframe r-faq

275
推荐指数
9
解决办法
49万
查看次数

评估以字符串形式给出的表达式

我很想知道R是否可以使用它的eval()功能来执行例如字符串提供的计算.

这是一个常见的情况:

eval("5+5")
Run Code Online (Sandbox Code Playgroud)

但是,而不是10我得到:

[1] "5+5"
Run Code Online (Sandbox Code Playgroud)

有解决方案吗

eval r r-faq

263
推荐指数
7
解决办法
17万
查看次数

为什么这些数字不相等?

以下代码显然是错误的.有什么问题?

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)

floating-point r floating-accuracy r-faq

263
推荐指数
4
解决办法
4万
查看次数

测试字符是否在字符串中

我正在尝试确定字符串是否是另一个字符串的子集.例如:

chars <- "test"
value <- "es"
Run Code Online (Sandbox Code Playgroud)

如果"value"作为字符串"chars"的一部分出现,我想返回TRUE.在以下场景中,我想返回false:

chars <- "test"
value <- "et"
Run Code Online (Sandbox Code Playgroud)

regex string r r-faq

248
推荐指数
8
解决办法
39万
查看次数

如何将数据从长格式转换为宽格式?

我无法重新排列以下数据框:

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和其他一些东西,但没有人可以做的工作.

r reshape r-faq

243
推荐指数
11
解决办法
18万
查看次数

连接字符串/字符的向量

如果我有一个字符类型的向量,我如何将值连接成字符串?这是我用paste()做的方法:

sdata = c('a', 'b', 'c')
paste(sdata[1], sdata[2], sdata[3], sep ='')
Run Code Online (Sandbox Code Playgroud)

屈服"abc".

但是,当然,这只有在我提前了解sdata的长度时才有效.

string r r-faq

241
推荐指数
6
解决办法
26万
查看次数

格式化R中的小数位数

我有一个数字,例如1.128347132904321674821,我想在输出到屏幕(或写入文件)时只显示两位小数.怎么做到这一点?

x <- 1.128347132904321674821
Run Code Online (Sandbox Code Playgroud)

编辑:

指某东西的用途:

options(digits=2)
Run Code Online (Sandbox Code Playgroud)

已被建议作为可能的答案.有没有办法在脚本中指定一次性使用?当我将它添加到我的脚本时,它似乎没有做任何不同的事情,我对很多重新键入格式化每个数字感兴趣(我正在自动化一个非常大的报告).

-

答案:round(x,digits = 2)

formatting r rounding r-faq

238
推荐指数
8
解决办法
47万
查看次数

Rscript:确定执行脚本的路径

我有一个名为的脚本foo.R包含另一个脚本other.R,该脚本位于同一目录中:

#!/usr/bin/env Rscript
message("Hello")
source("other.R")
Run Code Online (Sandbox Code Playgroud)

但我想R发现other.R无论当前的工作目录是什么.

换句话说,foo.R需要知道自己的路径.我怎样才能做到这一点?

r file path rscript r-faq

234
推荐指数
14
解决办法
11万
查看次数

同时合并列表中的多个data.frames

我有一个我要合并的许多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)

(很明显,我在其他地方看到了其他对此错误的引用而没有解决方案).

有什么方法可以解决这个问题吗?

merge r list dataframe r-faq

233
推荐指数
6
解决办法
15万
查看次数