小编Mar*_*lla的帖子

使用group_by(多个变量)时dplyr问题

我想开始使用dplyr代替ddply,但我无法理解它是如何工作的(我已阅读文档).

例如,为什么当我尝试mutate()时,"group_by"函数不能正常工作?

看着mtcars:

库(车)

假设我创建了一个data.frame,它是mtcars的摘要,按"cyl"和"gear"分组:

df1 <- mtcars %.%
            group_by(cyl, gear) %.%
            summarise(
                newvar = sum(wt)
            )
Run Code Online (Sandbox Code Playgroud)

然后说我想进一步总结这个数据帧.使用ddply,它很简单,但是当我尝试使用dplyr时,它实际上并不是"分组依据":

df2 <- df1 %.%
            group_by(cyl) %.%
            mutate(
                newvar2 = newvar + 5
            )
Run Code Online (Sandbox Code Playgroud)

仍然产生一个未分组的输出:

  cyl gear newvar newvar2
1   6    3  6.675  11.675
2   4    4 19.025  24.025
3   6    4 12.375  17.375
4   6    5  2.770   7.770
5   4    3  2.465   7.465
6   8    3 49.249  54.249
7   4    5  3.653   8.653
8   8    5  6.740  11.740
Run Code Online (Sandbox Code Playgroud)

我在做错了语法吗?


编辑:

如果我要用plyr和ddply这样做:

df1 …
Run Code Online (Sandbox Code Playgroud)

group-by r compound-key dplyr

46
推荐指数
5
解决办法
8万
查看次数

在R中grepl以查找与任何字符串列表的匹配

在引用值列表时是否可以使用grepl参数,可能使用%in%运算符?我想获取下面的数据,如果动物名称中有"dog"或"cat",我想返回一个值,比如"keep"; 如果它没有"狗"或"猫",我想返回"丢弃".

data <- data.frame(animal = sample(c("cat","dog","bird", 'doggy','kittycat'), 50, replace = T))
Run Code Online (Sandbox Code Playgroud)

现在,如果我只是通过严格匹配值来做到这一点,比如"cat"和"dog",我可以使用以下方法:

matches <- c("cat","dog")

data$keep <- ifelse(data$animal %in% matches, "Keep", "Discard")
Run Code Online (Sandbox Code Playgroud)

但是使用grep或grepl只引用列表中的第一个参数:

data$keep <- ifelse(grepl(matches, data$animal), "Keep","Discard")
Run Code Online (Sandbox Code Playgroud)

回报

Warning message:
In grepl(matches, data$animal) :
  argument 'pattern' has length > 1 and only the first element will be used
Run Code Online (Sandbox Code Playgroud)

注意,我在搜索中看到了这个帖子,但这似乎不起作用: grep使用具有多个模式的字符向量

regex grep r grepl

13
推荐指数
3
解决办法
5万
查看次数

SublimeREPL无法找到R.

好吧,这让我发疯了.我之前设置过这个,删除了Sublime Text,现在我记不起正确的配置了.

很简单:我通过SublimeREPL运行R,需要将REPL指向安装R的位置.

我按照http://sublimerepl.readthedocs.org/en/latest/上的说明进行操作,这说明进入用户定义的REPL设置并添加:

{
 ...
 "default_extend_env": {"PATH": "{PATH}:/home/myusername/bin"}
 ...
} 
Run Code Online (Sandbox Code Playgroud)

路径指向正确目录的位置.我尝试用它替换它

{
 ...
 "default_extend_env": {"PATH": "C:/Program Files/R/R-3.0.2/bin"}
 ...
}
Run Code Online (Sandbox Code Playgroud)

并且它仍然无法找到R,加上现在它给了我错误:

Error trying to parse settings: Expected value in Packages\User\SublimeREPL.sublime-     settings:2:2
Run Code Online (Sandbox Code Playgroud)

我知道这是一个简单的解决方案.谁能指出我在这里做错了什么?


*我正在使用Sublime Text 3.我之前有这个工作,但是在Sublime Text 2上.

r sublimerepl sublimetext3

11
推荐指数
1
解决办法
5109
查看次数

将模型应用于多个时间序列

假设我有多个时间序列需要预测。如果我为每个对象设置了合适的时间序列对象,我就可以拟合(例如)一个 ARIMA 模型等等。但是,我知道当所有系列都在一个xts对象中时,必须有一种简单的方法来自动化这个过程(撇开不同的变量可能需要不同的 ARIMA 模型的事实;这可能是另一个问题)。

一些示例数据作为 xts 对象(六个不同业务的每日收入):

library(xts)

ts <- structure(c(534L, 549L, 636L, 974L, 848L, 895L, 1100L, 1278L, 
1291L, 1703L, 1532L, 533L, 619L, 642L, 939L, 703L, 759L, 1213L, 
1195L, 1153L, 1597L, 1585L, 649L, 597L, 628L, 924L, 703L, 863L, 
1261L, 1161L, 1212L, 1616L, 1643L, 583L, 694L, 611L, 891L, 730L, 
795L, 1242L, 1210L, 1159L, 1501L, 1702L, 513L, 532L, 580L, 917L, 
978L, 947L, 1227L, 1253L, 1121L, 1697L, 1569L, 646L, 636L, 516L, 
869L, 980L, 937L, 1173L, 1203L, 1204L, 1511L, 1640L), .Dim …
Run Code Online (Sandbox Code Playgroud)

r xts

5
推荐指数
1
解决办法
4945
查看次数

列出 R 中数据帧的元素

我将如何获取列表的元素并将它们制作成数据框,每个数据框名称与列表元素名称一致?

前任:

exlist <- list(west=c(2,3,4), north=c(2,5,6), east=c(2,4,7))
Run Code Online (Sandbox Code Playgroud)

我绊倒的地方在于独特数据帧的实际命名——我不知道如何使用 for() 循环或 lapply 来做到这一点:

for(i in exlist) {
    i <- data.frame(exlist$i)
}
Run Code Online (Sandbox Code Playgroud)

给了我一个名为 i 的空数据框,而我希望制作三个数据框(一个称为西,另一个称为北,另一个称为东)

当我使用 lapply 语法并调用单个列表元素名称时,我得到空数据框:

lapply(exlist, function(list) i <- data.frame(list["i"]))
Run Code Online (Sandbox Code Playgroud)

产量

data frame with 0 columns and 0 rows
> $west
  list..i..
1        NA

$north
  list..i..
1        NA

$east
  list..i..
1        NA
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
2771
查看次数

dplyr + group_by并避免按字母顺序排序

我有以下数据:

    data <- structure(list(user = c(1234L, 1234L, 1234L, 1234L, 1234L, 1234L, 
1234L, 1234L, 1234L, 1234L, 1234L, 4758L, 4758L, 9584L, 9584L, 
9584L, 9584L, 9584L, 9584L), time = c(1L, 2L, 3L, 4L, 5L, 6L, 
7L, 8L, 9L, 10L, 11L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L), fruit = structure(c(1L, 
6L, 1L, 1L, 6L, 5L, 5L, 3L, 4L, 1L, 2L, 4L, 2L, 1L, 6L, 5L, 5L, 
3L, 2L), .Label = c("apple", "banana", "lemon", "lime", "orange", 
"pear"), class = "factor"), count = c(1L, …
Run Code Online (Sandbox Code Playgroud)

r dplyr

5
推荐指数
2
解决办法
690
查看次数

在R中截断但不舍入

确实很基础,但Google并未给出答案。有没有一种方法可以截断数值而不四舍五入

例如:

vars <- c(23.4567, 45.6795, 34.5670)
Run Code Online (Sandbox Code Playgroud)

我希望输出仅跳过最后两个有效数字,但不舍入输出。我想要的是:

vars <- c(23.45, 45.67, 34.56)
Run Code Online (Sandbox Code Playgroud)

但是,最常见的处理方法是四舍五入(当然,四舍五入也是有意义的

round(vars, 2)
Run Code Online (Sandbox Code Playgroud)

[1] 23.46 45.68 34.57

signif(vars, digits=4)
Run Code Online (Sandbox Code Playgroud)

[1] 23.46 45.68 34.57

如果这里已经解决了这个问题,请指出正确的方向,但找不到R特有的...

r

5
推荐指数
2
解决办法
3088
查看次数

llply对多个数​​据帧的操作

是否有一种简单的方法(即,无需使用"for"循环)来执行以下操作:

我有几个数据框.我想使用plyr操作来总结它们.在这个例子中,我有两个数据框,东部和西部,我想用国家的花费和试验来总结它们.

这是示例数据框:

west <- data.frame(
    spend = sample(50:100,50,replace=T),
    trials = sample(100:200,50,replace=T),
    country = sample(c("usa","canada","uk"),50,replace = T)
    )

east <- data.frame(
    spend = sample(50:100,50,replace=T),
    trials = sample(100:200,50,replace=T),
    country = sample(c("china","japan","skorea"),50,replace = T)
    )
Run Code Online (Sandbox Code Playgroud)

以及两个数据帧的组合列表:

combined <- c(west,east)
Run Code Online (Sandbox Code Playgroud)

我想要做的是同时对这两个数据帧进行ddply类型的操作,并将输出作为一个列表(至少看起来最简单).例如,如果我只是在一个数据帧上运行,它将是这样的:

country.df <- ddply(west, .(country), summarise,
    spend = sum(spend),
    trials = sum(trials)
)
Run Code Online (Sandbox Code Playgroud)

但我想大规模地这样做.我尝试在llply参数中使用类似的语法,但这不起作用(我有一种感觉,我错过了一些非常明显的东西):

countries.list <- llply(combined, .(country), summarise,
    spend = sum(spend),
    trials = sum(trials)
)
Run Code Online (Sandbox Code Playgroud)

返回错误:"FUN中的错误(X [[1L]],...):尝试应用非功能"

...我可以通过编写一个函数来思考一种方法,然后将其传递给apply参数.但似乎llply应该能够处理这种"开箱即用",因为它是一个相当直接的使用工具的功能.

我在这里错过了什么?

r

4
推荐指数
2
解决办法
1745
查看次数

ggplot中的分层轴?

我想知道是否可以在GGLPOT2(或其他图形包中制作分层/分段轴;我只是喜欢ggplot).

我想要做的是采取以下数据,制作一个堆积条形图,其中包含在x轴上的周期,但在每个周期内,每个动物也是如此.然后每只动物中的条形颜色将是"颜色"变量

set.seed(1234)
data <- data.frame(
    animal = sample(c('bear','tiger','lion'), 50, replace=T),
    color = sample(c('black','brown','orange'), 50, replace=T),
    period = sample(c('first','second','third'), 50, replace=T),
    value = sample(1:100, 50, replace=T))
Run Code Online (Sandbox Code Playgroud)

然后将其放入堆积条形图中:

library(ggplot2)
plot <- ggplot(data, aes(x=period, y=value, fill=color)) + 
    geom_bar(stat='identity')
Run Code Online (Sandbox Code Playgroud)

产生这个:

在此输入图像描述

但我真正想要的是,在每个栏中,每个动物有三个独立的堆叠条(按颜色堆叠).

我有一种感觉,我在这里缺少一个简单的语法,但"显而易见"的东西似乎不起作用,例如,

plot <- ggplot(data, aes(x=c(period,animal), y=value, fill=color)) + 
    geom_bar(stat='identity')
Run Code Online (Sandbox Code Playgroud)

r ggplot2

4
推荐指数
1
解决办法
967
查看次数

ggplot箱线图+填充+颜色布鲁尔光谱

我似乎无法使用 color Brewer 用连续值填充箱线图,而且我知道它一定只是在某个地方进行简单的语法交换,因为我可以根据连续值调整框的轮廓。这是我正在使用的数据:

data <- data.frame(
    value = sample(1:50),
    animals = sample(c("cat","dog","zebra"), 50, replace = TRUE),
    region = sample(c("forest","desert","tundra"), 50, replace = TRUE)
)
Run Code Online (Sandbox Code Playgroud)

我想制作一个镶板箱线图,按中值“值”排序,每个框的颜色填充深度随着“值”的增加而增加(我知道这是多余的,但为了示例请耐心等待)

(数据排序):

orderindex <- order(as.numeric(by(data$value, data$animals, median)))
data$animals <- ordered(data$animals, levels=levels(data$animals)[orderindex])
Run Code Online (Sandbox Code Playgroud)

如果我用面板创建箱线图,我可以调整轮廓的颜色:

library(ggplot2)
first <- qplot(animals, value, data = data, colour=animals)
second <- first + geom_boxplot() + facet_grid(~region)
third <- second + scale_colour_brewer()
print(third)
Run Code Online (Sandbox Code Playgroud)

但我想对轮廓进行同样的操作,但要填充每个框(因此随着“值”的增加,每个框都会变暗)。我认为这可能是将“scale_colour_brewer()”参数放在 geom_boxplot 的美学参数中的问题,即

second <- first + geom_boxplot(aes(scale_colour_brewer())) + facet_grid(~region)
Run Code Online (Sandbox Code Playgroud)

但这似乎并不能解决问题。我知道这是这个“scale_colour_brewer”参数的定位问题;我只是不知道它去哪里了!

(这里有一个类似的问题,但它不完全是我想要的,因为盒子的颜色不会沿着具有某些连续值的光谱/梯度增加;看起来这些值基本上是因素:将颜色添加到boxplot - “连续值提供给离散比例”错误 …

r ggplot2

1
推荐指数
1
解决办法
8353
查看次数

标签 统计

r ×10

dplyr ×2

ggplot2 ×2

compound-key ×1

grep ×1

grepl ×1

group-by ×1

regex ×1

sublimerepl ×1

sublimetext3 ×1

xts ×1