我有一个包含几列的数据框,其中一列是rank,一个介于1和20之间的整数.我想创建另一个包含bin值的列,如"1-4","5-10","11- 15","16-20".
这样做最有效的方法是什么?
我看起来像这样的数据框(.csv格式):
rank,name,info
1,steve,red
3,joe,blue
6,john,green
3,liz,yellow
15,jon,pink
Run Code Online (Sandbox Code Playgroud)
我想在数据框中添加另一列,所以它会是这样的:
rank,name,info,binValue
1,steve,red,"1-4"
3,joe,blue,"1-4"
6,john,green, "5-10"
3,liz,yellow,"1-4"
15,jon,pink,"11-15"
Run Code Online (Sandbox Code Playgroud)
我现在这样做的方式不起作用,因为我想保持data.frame完好无损,如果df $的值在给定范围内,则只添加另一列.谢谢.
我有一个R数据帧(df),我将其绘制为ggplot2中的条形图,并基于dataframe(df$type
)中的列进行着色.现在,我使用默认的着色模式(scale_fill_brewer)来分配颜色.
如何将黑色分配给一个值(scale_fill_brewer
)并使用scale_fill_brewer分配其余颜色?(所有其他df $类型都是从1到X的整数集合,其中X是唯一值的数量)
到目前为止,我已经能够通过计算出scale_fill_brewer用于N个不同项目的颜色集然后预先设置颜色黑色并将其传递给我来手动执行此操作df$type == -1
.
rhg_cols1<- c("#000000","#F8766D","#7CAE00","#00BFC4","#C77CFF" )
ggplot(y=values,data=df, aes(x=name, fill=factor(type))) +
geom_bar()+ scale_fill_manual(values = rhg_cols1)
Run Code Online (Sandbox Code Playgroud)
问题是我需要一个无需手动分配颜色的解决方案,使用十六进制颜色计算器来计算scale_fill_brewer的十六进制值.
就像是:
ggplot(y=values,data=df, aes(x=name, fill=factor(type))) +
geom_bar()+ scale_fill_brewer(value(-1, "black")
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:该解决方案必须适用于30多种颜色,适用于ColorBrewer的"Set2"
我已经写了几个月的全职perl代码(生物信息学),并且总是试图提高我的技能.就在今天,我突然意识到我从不使用地图或grep.回顾一下我的代码,我意识到这些工具可以在这里或那里省去几行,但只是牺牲了foreach循环的灵活性.我的问题如下:
你有没有遇到过使用map或grep比foreach/for循环带来显着优势的情况,除了保存一行或两行代码之外?
谢谢你的时间!
我遇到了一个奇怪的问题.我能够使用R/ggplot2创建和保存pdf文件,并在R Console运行时查看它们.一旦我退出R控制台,Mac OS X上的预览将不再显示PDF.我已经能够保存.png文件没有问题,但由于我无法控制的原因,我需要保存为pdf文件.我用来保存的代码如下:
pdfFile <-c("/Users/adam/mock/dir/structure.pdf")
pdf(pdfFile)
ggplot(y=count,data=allCombined, aes(x=sequenceName, fill=factor(subClass))) + geom_bar()
ggsave(pdfFile)
Run Code Online (Sandbox Code Playgroud)
有谁遇到过类似的问题?如果是这样,我需要做些什么来解决它?非常感谢您的宝贵时间.
我想让ddply在我的mac上并行运行.我使用的代码如下:
library(doMC)
library(ggplot2) # for the purposes of getting the baseball data.frame
registerDoMC(2)
> system.time(ddply(baseball, .(year), numcolwise(mean)))
user system elapsed
0.959 0.106 1.522
> system.time(ddply(baseball, .(year), numcolwise(mean), .parallel=TRUE))
user system elapsed
2.221 2.790 2.552
Run Code Online (Sandbox Code Playgroud)
当我运行.parallel = TRUE时为什么ddply会变慢?我在网上搜索无济于事.我也尝试registerDoMC()
了,结果是一样的.
来自命令式编程语言,我试图围绕Clojure,希望将其用于其多线程功能.4Clojure的
一个问题是编写一个函数,生成一个长度为N的Fibonacci数列表,对于N> 1.我写了一个函数,但是由于我的背景有限,我想知道是否这是一个函数最好的Clojure做事方式.代码如下:
(fn fib [x] (cond
(= x 2) '(1 1)
:else (reverse (conj (reverse (fib (dec x))) (+ (last (fib (dec x))) (-> (fib (dec x)) reverse rest first))))
))
Run Code Online (Sandbox Code Playgroud) 我一直在玩clojure,并决定创建一个更高阶的函数,它结合了mapcat和list来模拟这种行为:
Clojure> (mapcat list '(1 2 3 4) '(5 6 7 8))
(1 5 2 6 3 7 4 8)
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试是定义mapcatList,如下所示:
Clojure> (defn mapcatList[& more](mapcat list more))
#'sandbox99/mapcatList
Clojure> (mapcatList '(1 2 3 4) '(5 6 7 8))
((1 2 3 4) (5 6 7 8))
Run Code Online (Sandbox Code Playgroud)
显然这个函数并不像我想要的那样,我认为这是因为这两个列表被放入一个列表并作为单个参数传递,而不是两个.我能够通过以下方式纠正这种情况,
Clojure> (defn mapcatList[x y & more](mapcat list x y))
#'sandbox99/mapcatList
Clojure> (mapcatList '(1 2 3 4) '(5 6 7 8))
(1 5 2 6 3 7 4 8)
Run Code Online (Sandbox Code Playgroud)
这个解决方案适用于两个列表,但我希望该函数使用可变数量的参数.
我的问题:如何将一个可变数量的参数传递给一个函数,然后对它们进行解构,使它们作为单独的参数一起传递给'mapcat list'?
在尝试调试R函数时,我提出了以下内容:
是否有办法可选地将被调用函数的局部变量绑定到调用环境?
例如
testFunction <- function(x=1,y=2){
localVar1 <- x + 2
localVar2 <- x + y
sum(x,y)
}
sumXY <- testFunction()
if(exists("localVar1") && exists("localVar2")){
print("test passed")
}
Run Code Online (Sandbox Code Playgroud)
请注意,此功能仅用于交互式调试,并且<<-
操作员不适合我的脚本.编辑1:我正在寻找一种不会改变功能的解决方案,因为我正在使用它来测试/调试分析代码.
关于R中的数据帧的问题.我想从数据帧中提取一行,以及它在原始数据帧中的位置(行号).该想法是创建新的数据帧,其包括从先前数据帧提取的行信息,以及来自先前数据帧的行位置.
patchLocalNo <- patchList[which(patchListTop5$sensitivity == patchLocalSpec),]
Run Code Online (Sandbox Code Playgroud)
我想要做的是从patchList获取满足条件的行号,并将它们添加到patchLocalNo中的列.
提前谢谢你,我已经在线搜索并询问了同事,我能想出的就是在perl中对数据进行预处理.
我通过在数据集和多个参数下运行它来优化非常耗时/耗费内存的程序.对于每个"运行",我有一个csv文件,"setup.csv"设置为"runNumber",每次运行"命令".然后我将其导入perl脚本以读取我想要的运行编号的命令,推断变量,然后通过系统命令在系统上执行它.我是否应该担心这种情况有可能被剥削,(我现在很担心)?如果是这样,我该怎么做才能保护我们的服务器?我现在的计划是将"setup.csv"的文件权限更改为只读,将所有权更改为root,然后在需要将另一个运行附加到列表时以root身份进入.非常感谢您的宝贵时间.
R有反射吗?
http://en.wikipedia.org/wiki/Reflection_(computer_programming)
基本上我想做的是这样的:
currentRun = "run287"
dataFrame$currentRun= someVar;
Run Code Online (Sandbox Code Playgroud)
这dataFrame$currentRun
相当于dataFrame$run287
.
这并没有阻止我解决任何问题,但从学术角度来看,我想知道R是否支持反思编程.如果是这样,如何在给出的例子中使用反射?谢谢!
我需要从dataframe1的行创建一个新的数据帧,这样dataframe1 $ column的值是在dataframe2 $ colum中找到的值
数据帧是:
y <- "name,number,lunch
joe,2,peaches
steve,5,hotdog
jon,7,clamroll
nick,11,sloppyJoe"
x <- "number,office
1,1b
2,1a
3,2s
4,4d
5,f4
6,f4
7,h3
8,g3
9,j7
10,d3
11,jk"
df1 <- read.csv(textConnection(df1), header=TRUE, sep=",", stringsAsFactors=FALSE)
df2 <- read.csv(textConnection(df2), header=TRUE, sep=",", stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)
我试过了:
df3 <- df1[which(df1$number == df2$number), ]
Run Code Online (Sandbox Code Playgroud)
无济于事.我如何在R中正确执行此操作?我可以编写一个perl脚本,但我有大约100个这样的集合,并且不想创建更多的临时文件.
r ×8
clojure ×2
ggplot2 ×2
macos ×2
perl ×2
colorbrewer ×1
colors ×1
currying ×1
fibonacci ×1
plyr ×1
r-faq ×1
refactoring ×1
reflection ×1