我正在使用mtcars数据集。 我想查找特定数据组合的logging数。 与SQL中的count(*) group by子句非常相似。 ddply()来自plyr正在为我工作 library(plyr) ddply(mtcars, .(cyl,gear),nrow) 有输出 cyl gear V1 1 4 3 1 2 4 4 8 3 4 5 2 4 6 3 2 5 6 4 4 6 6 5 1 7 8 3 12 8 8 5 2 使用这个代码 library(dplyr) g <- group_by(mtcars, cyl, gear) summarise(g, length(gear)) 有输出 […]
我经常需要根据不同variables的值来更改variables的值,如下所示: mtcars$mpg[mtcars$cyl == 4] <- NA 我试着用dplyr做这个,但是失败了: mtcars %>% mutate(mpg = mpg == NA[cyl == 4]) %>% as.data.frame() 我怎么能用dplyr做到这dplyr ?
这真的挑战了我debuggingR代码的能力。 我想使用ddply()将相同的function应用到按顺序命名的不同列; 例如。 a,b,c。 为此,我打算重复传递列名作为string,并使用eval(parse(text=ColName))来允许函数引用它。 我从另一个答案中抓住了这个技巧。 这工作得很好,直到我把ddply()放在另一个函数中。 这里是示例代码: # Required packages: library(plyr) myFunction <- function(x, y){ NewColName = "a" z = ddply(x, y, summarize, Ave = mean(eval(parse(text=NewColName)), na.rm=TRUE) ) return(z) } a = c(1,2,3,4) b = c(0,0,1,1) c = c(5,6,7,8) df = data.frame(a,b,c) sv = c("b") #This works. ColName = "a" ddply(df, sv, summarize, Ave […]
我(可能)没有提到“所有其他variables”,就像var1~. 这里。 我又一次被指向plyr ,看着mlply ,想知道为什么参数是用像这样的前导点来定义的: function (.data, .fun = NULL, …, .expand = TRUE, .progress = "none", .parallel = FALSE) { if (is.matrix(.data) & !is.list(.data)) .data <- .matrix_to_df(.data) f <- splat(.fun) alply(.data = .data, .margins = 1, .fun = f, …, .expand = .expand, .progress = .progress, .parallel = .parallel) } <environment: namespace:plyr> 那有什么用? 这只是个人喜好,命名规则还是更多? […]
我有一个从蝾螈胆量来的各种节肢动物的长度和宽度的数据框。 因为有些胆量有成千上万的猎物,我只测量了每种猎物types的一个子集。 我现在想用每个不可测量的个体来replace那个猎物的平均长度和宽度。 我想保持数据框,只是添加估算列(length2,width2)。 主要原因是每一行也有蝾螈收集date和地点的数据栏。 我可以用随机select的测量个体来填写NA,但是为了论证,我们假设我只想用平均值replace每个NA。 例如,假设我有一个像这样的数据框: id taxa length width 101 collembola 2.1 0.9 102 mite 0.9 0.7 103 mite 1.1 0.8 104 collembola NA NA 105 collembola 1.5 0.5 106 mite NA NA 事实上,我有更多的专栏和大约25种不同的分类群,总共有大约3万个猎物。 似乎plyr包可能是理想的,但我只是不知道如何做到这一点。 我不是很R或编程精明,但我试图学习。 不是说我知道自己在做什么,但是如果有帮助,我会尝试创build一个小数据集。 exampleDF <- data.frame(id = seq(1:100), taxa = c(rep("collembola", 50), rep("mite", 25), rep("ant", 25)), length = c(rnorm(40, […]
我有一个模拟,有一个巨大的总和,结合步骤正确的中间。 我使用plyr的ddply()函数对这个过程进行了原型devise,这对于我的需求来说非常有用。 但是我需要这个聚合步骤,因为我必须运行10K模拟。 我已经并行扩展了模拟,但如果这一步更快,我可以大大减less我需要的节点数量。 这是我想要做的合理的简化: library(Hmisc) # Set up some example data year <- sample(1970:2008, 1e6, rep=T) state <- sample(1:50, 1e6, rep=T) group1 <- sample(1:6, 1e6, rep=T) group2 <- sample(1:3, 1e6, rep=T) myFact <- rnorm(100, 15, 1e6) weights <- rnorm(1e6) myDF <- data.frame(year, state, group1, group2, myFact, weights) # this is the step I want […]
不像我发现的问题,我想获得没有秩序的两列独特。 我有一个df: df<-cbind(c("a","b","c","b"),c("b","d","e","a")) > df [,1] [,2] [1,] "a" "b" [2,] "b" "d" [3,] "c" "e" [4,] "b" "a" 在这种情况下,第1行和第4行是“重复”,意思是ba和ba一样。 我知道如何find第1列和第2列的独特之处,但是我会发现在这种方法下每一行都是唯一的。
我有困难找出最优雅和灵活的方式来切换数据从长格式到宽格式,当我有多个度量variables我想带。 例如,这是一个长格式的简单数据框。 ID是主题,TIME是时间variables,X和Y是在TIME进行的ID测量: > my.df <- data.frame(ID=rep(c("A","B","C"), 5), TIME=rep(1:5, each=3), X=1:15, Y=16:30) > my.df ID TIME XY 1 A 1 1 16 2 B 1 2 17 3 C 1 3 18 4 A 2 4 19 5 B 2 5 20 6 C 2 6 21 7 A 3 7 22 8 B 3 […]
当使用plyr的ddply函数进行summarise时,默认情况下会删除空的类别。 您可以通过添加.drop = FALSE来更改此行为。 但是,在使用dplyr进行summarise时,这不起作用。 是否有另一种方法来保持结果中的空白类别? 这是假数据的例子。 library(dplyr) df = data.frame(a=rep(1:3,4), b=rep(1:2,6)) # Now add an extra level to df$b that has no corresponding value in df$a df$b = factor(df$b, levels=1:3) # Summarise with plyr, keeping categories with a count of zero plyr::ddply(df, "b", summarise, count_a=length(a), .drop=FALSE) b count_a 1 1 6 2 2 6 […]
我经常需要对数据框/matrix中的每对列应用函数,并将结果以matrixforms返回。 现在我总是写一个循环来做到这一点。 例如,要创build一个包含相关p值的matrix,我写: df <- data.frame(x=rnorm(100),y=rnorm(100),z=rnorm(100)) n <- ncol(df) foo <- matrix(0,n,n) for ( i in 1:n) { for (j in i:n) { foo[i,j] <- cor.test(df[,i],df[,j])$p.value } } foo[lower.tri(foo)] <- t(foo)[lower.tri(foo)] foo [,1] [,2] [,3] [1,] 0.0000000 0.7215071 0.5651266 [2,] 0.7215071 0.0000000 0.9019746 [3,] 0.5651266 0.9019746 0.0000000 哪个起作用,但是对于非常大的matrix非常缓慢。 我可以在R中为此写一个函数(不要因为假设上面的对称结果而把切割时间减半): Papply <- function(x,fun) { n <- […]