我有一个问题的解决scheme,涉及循环和工作,但我觉得我失去了一些涉及更有效的实现。 问题:我有一个数字向量序列,并且想要识别第一个向量的另一个向量中的起始位置。 它是这样工作的: # helper function for matchSequence # wraps a vector by removing the first n elements and padding end with NAs wrapVector <- function(x, n) { stopifnot(n <= length(x)) if (n == length(x)) return(rep(NA, n)) else return(c(x[(n+1):length(x)], rep(NA, n))) } wrapVector(LETTERS[1:5], 1) ## [1] "B" "C" "D" "E" NA wrapVector(LETTERS[1:5], 2) ## [1] […]
做一个计数器索引比使用循环有更快的方法吗? 在相同价值的连续运行中,指数应该是相同的。 我发现这个循环非常慢,特别是当数据太大的时候。 为了说明,这里是input和期望的输出 x <- c(2, 3, 9, 2, 4, 4, 3, 4, 4, 5, 5, 5, 1) 期望的结果计数器: c(1, 2, 3, 4, 5, 5, 6, 7, 7, 8, 8, 8, 9) 请注意, 不连续的运行具有不同的索引。 例如,请参阅值2和4的所需索引 我低效率的代码是这样的: group[1]<-1 counter<-1 for (i in 2:n){ if (x[i]==x[i-1]){ group[i]<-counter }else{ counter<-counter+1 group[1]<-counter} }
我有%d%b%y格式的生日文件。 一些例如。 # "01DEC71" "01AUG54" "01APR81" "01MAY81" "01SEP83" "01FEB59" 我试图重新格式化date o108$fmtbirth <- format(as.Date(o108$birth, "%d%b%y"), "%Y/%m/%d") 这是结果 # "1971/12/01" "2054/08/01" "1981/04/01" "1981/05/01" "1983/09/01" "2059/02/01" 这些是生日,我看到2054年。从这个页面我看到,00年和68年之间的值被编码为20世纪。 有没有办法切换这个,在我的情况下,我只想要00到12被编码为20。
我正在使用网格 lpackage放置我用ggplot2制作的graphics : library(ggplot2) library(grid) Layout <- grid.layout(nrow = 4, ncol = 4, widths = unit(1, "null"), heights = unit(c(0.4, 0.8, 1.2, 1.2), c("null", "null", "null"))) grid.show.layout(Layout) plot1 = ggplot(diamonds, aes(clarity, fill = color)) + geom_bar() + facet_wrap(~cut, nrow = 1) print(plot1 + theme(legend.position = "none"), vp = viewport(layout.pos.row = 3, layout.pos.col = 1:4)) 问题是我想把第三行(3,1) […]
我有dataframe dih_y2。 这两行给我一个警告: > memb = dih_y2$MemberID[1:10] > dih_col = which(dih_y2$MemberID == memb) Warning message: In dih_y2$MemberID == memb : longer object length is not a multiple of shorter object length 为什么?
我有一个date的vector,每个项目,我想分配一个赛季。 例如,如果date在21.12之间。 和21.3。,我会说那是winter 。 到目前为止,我已经尝试了下面的代码,但无论年份如何,我都不能使它更通用。 my.dates <- as.Date("2011-12-01", format = "%Y-%m-%d") + 0:60 low.date <- as.Date("2011-12-15", format = "%Y-%m-%d") high.date <- as.Date("2012-01-15", format = "%Y-%m-%d") my.dates[my.dates <= high.date & my.dates >= low.date] [1] "2011-12-15" "2011-12-16" "2011-12-17" "2011-12-18" "2011-12-19" "2011-12-20" "2011-12-21" "2011-12-22" "2011-12-23" "2011-12-24" "2011-12-25" [12] "2011-12-26" "2011-12-27" "2011-12-28" "2011-12-29" "2011-12-30" "2011-12-31" "2012-01-01" "2012-01-02" "2012-01-03" "2012-01-04" […]
我正在通过机器学习黑客,我被困在这一行: from.weight <- ddply(priority.train, .(From.EMail), summarise, Freq = length(Subject)) 其中会产生以下错误: Error in attributes(out) <- attributes(col) : 'names' attribute [9] must be the same length as the vector [1] 这是一个追溯(): > traceback() 11: FUN(1:5[[1L]], …) 10: lapply(seq_len(n), extract_col_rows, df = x, i = i) 9: extract_rows(x$data, x$index[[i]]) 8: `[[.indexed_df`(pieces, i) 7: pieces[[i]] 6: function (i) { […]
我正在尝试生成具有多个因素分组的条形图。 我尝试创build的一个例子来自于品种和灌溉处理的细分: 我知道我可以使用facet_wrap()生成多个图表,但是我想为多年的类似数据生成同一types数据的多个图表。 我在这个例子中使用的数据的一个例子: Year Trt Variety geno yield SE 2010-2011 Irr Variety.2 1 6807 647 2010-2011 Irr Variety.2 2 5901 761 2010-2011 Irr Variety.1 1 6330 731 2010-2011 Irr Variety.1 2 5090 421 2010-2011 Dry Variety.2 1 3953 643 2010-2011 Dry Variety.2 2 3438 683 2010-2011 Dry Variety.1 1 3815 605 2010-2011 Dry Variety.1 […]
我有一个不同的列的数据框列表,我想把它们合并成一个数据框。 我使用rbind.fill来做到这一点。 我正在寻找更有效的方法。 类似于这里给出的答案 require(plyr) set.seed(45) sample.fun <- function() { nam <- sample(LETTERS, sample(5:15)) val <- data.frame(matrix(sample(letters, length(nam)*10,replace=TRUE),nrow=10)) setNames(val, nam) } ll <- replicate(1e4, sample.fun()) rbind.fill(ll)
我正在尝试使用ggplot2创build一个barplot,在这里我通过一个variables进行堆栈,然后通过另一个variables进行躲避。 这是一个示例数据集: df=data.frame( year=rep(c("2010","2011"),each=4), treatment=rep(c("Impact","Control")), type=rep(c("Phylum1","Phylum2"),each=2), total=sample(1:100,8)) 我想创build一个barplot,其中x=treatment , y=total ,堆栈variables是type ,闪避variables是year 。 当然,我可以做一个或另一个: ggplot(df,aes(y=total,x=treatment,fill=type))+geom_bar(position="dodge",stat="identity") ggplot(df,aes(y=total,x=treatment,fill=year))+geom_bar(position="dodge",stat="identity") 但不是两个! 感谢任何能提供build议的人。