我想开始使用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) 在引用值列表时是否可以使用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使用具有多个模式的字符向量
好吧,这让我发疯了.我之前设置过这个,删除了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上.
我去过http://tomschenkjr.net/using-sublime-text-2-for-r/,他提到"指向SublimeREPL at R"的那篇文章......他没有包含实际代码,如我可以看到
我也看过这个帖子错误2系统找不到Sublime Text 2,Windows 8中指定的文件,但我之前有过工作,没有沿着这些行做任何事情
假设我有多个时间序列需要预测。如果我为每个对象设置了合适的时间序列对象,我就可以拟合(例如)一个 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) 我将如何获取列表的元素并将它们制作成数据框,每个数据框名称与列表元素名称一致?
前任:
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) 我有以下数据:
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) 确实很基础,但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特有的...
是否有一种简单的方法(即,无需使用"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应该能够处理这种"开箱即用",因为它是一个相当直接的使用工具的功能.
我在这里错过了什么?
我想知道是否可以在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) 我似乎无法使用 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 ×10
dplyr ×2
ggplot2 ×2
compound-key ×1
grep ×1
grepl ×1
group-by ×1
regex ×1
sublimerepl ×1
sublimetext3 ×1
xts ×1