小编Dav*_*urg的帖子

require()和library()有什么区别?

require()和之间有什么区别library()

packages r

524
推荐指数
8
解决办法
13万
查看次数

将数据框架字符串列拆分为多个列

我想要获取表格的数据

before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))
  attr          type
1    1   foo_and_bar
2   30 foo_and_bar_2
3    4   foo_and_bar
4    6 foo_and_bar_2
Run Code Online (Sandbox Code Playgroud)

并使用split()上面的列" type"来得到这样的东西:

  attr type_1 type_2
1    1    foo    bar
2   30    foo  bar_2
3    4    foo    bar
4    6    foo  bar_2
Run Code Online (Sandbox Code Playgroud)

我提出了一些令人难以置信的复杂问题,涉及某种形式的apply工作,但我已经错了.这似乎太复杂了,不是最好的方式.我可以使用strsplit如下,但不清楚如何将其恢复到数据框中的2列.

> strsplit(as.character(before$type),'_and_')
[[1]]
[1] "foo" "bar"

[[2]]
[1] "foo"   "bar_2"

[[3]]
[1] "foo" "bar"

[[4]]
[1] "foo"   "bar_2"
Run Code Online (Sandbox Code Playgroud)

谢谢你的任何指示.我还没有完全理解R列表.

string split r dataframe r-faq

218
推荐指数
13
解决办法
32万
查看次数

"*apply"系列真的没有矢量化吗?

因此,我们习惯于对每个R新用户说" apply没有矢量化,请查看Patrick Burns R Inferno Circle 4 ",其中说(我引用):

常见的反射是使用apply系列中的函数.这不是 矢量化,而是循环隐藏.apply函数在其定义中有一个for循环.lapply函数掩盖了循环,但执行时间往往大致等于显式for循环.

实际上,快速查看apply源代码会显示循环:

grep("for", capture.output(getAnywhere("apply")), value = TRUE)
## [1] "        for (i in 1L:d2) {"  "    else for (i in 1L:d2) {"
Run Code Online (Sandbox Code Playgroud)

好到目前为止,但看看lapplyvapply实际上揭示了一个完全不同的图片:

lapply
## function (X, FUN, ...) 
## {
##     FUN <- match.fun(FUN)
##     if (!is.vector(X) || is.object(X)) 
##        X <- as.list(X)
##     .Internal(lapply(X, FUN))
## }
## <bytecode: 0x000000000284b618>
## <environment: namespace:base>
Run Code Online (Sandbox Code Playgroud)

所以显然没有R for环隐藏在那里,而是他们调用内部C编写的函数.

兔子 洞的快速浏览显示了几乎相同的图片

此外,让我们以 …

performance loops r vectorization apply

132
推荐指数
4
解决办法
7851
查看次数

有没有办法在ggplot2中更改图例项之间的间距?

有没有办法在ggplot2中更改图例项之间的间距?我现在有

legend.position ="top" 
Run Code Online (Sandbox Code Playgroud)

它会自动生成水平图例.然而,物品的间距非常接近,我想知道如何将它们分开更远.

r legend ggplot2

108
推荐指数
8
解决办法
7万
查看次数

如何使用dplyr选择每组中具有最大值的行?

我想用dplyr在每个组中选择一个具有最大值的行.

首先,我生成一些随机数据来显示我的问题

set.seed(1)
df <- expand.grid(list(A = 1:5, B = 1:5, C = 1:5))
df$value <- runif(nrow(df))
Run Code Online (Sandbox Code Playgroud)

在plyr中,我可以使用自定义函数来选择此行.

library(plyr)
ddply(df, .(A, B), function(x) x[which.max(x$value),])
Run Code Online (Sandbox Code Playgroud)

在dplyr中,我使用此代码来获取最大值,但不是具有最大值的行(在本例中为C列).

library(dplyr)
df %>% group_by(A, B) %>%
    summarise(max = max(value))
Run Code Online (Sandbox Code Playgroud)

我怎么能实现这个目标?谢谢你的任何建议.

sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252   
[3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C                      
[5] LC_TIME=English_Australia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_0.2  plyr_1.8.1

loaded via a namespace (and not attached):
[1] assertthat_0.1.0.99 parallel_3.1.0      Rcpp_0.11.1 …
Run Code Online (Sandbox Code Playgroud)

r plyr greatest-n-per-group dplyr

98
推荐指数
4
解决办法
9万
查看次数

R用tidyr传播多个列

拿这个样本变量

df <- data.frame(month=rep(1:3,2),
                 student=rep(c("Amy", "Bob"), each=3),
                 A=c(9, 7, 6, 8, 6, 9),
                 B=c(6, 7, 8, 5, 6, 7))
Run Code Online (Sandbox Code Playgroud)

我可以使用spreadtidyr将其更改为宽格式.

> df[, -4] %>% spread(student, A)
  month Amy Bob
1     1   9   8
2     2   7   6
3     3   6   9
Run Code Online (Sandbox Code Playgroud)

但我怎么能传播两个值,例如既AB,使得输出是一样的东西

  month Amy.A Bob.A Amy.B Bob.B
1     1     9     8     6     5
2     2     7     6     7     6
3     3     6     9     8     7
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr tidyr

90
推荐指数
1
解决办法
7万
查看次数

81
推荐指数
3
解决办法
11万
查看次数

如何将矩阵子集化为一列,维护矩阵数据类型,维护行/列名称?

当我将矩阵子集化为单个列时,结果是类数字,而不是矩阵(即myMatrix [,5]到第五列的子集).是否有一种紧凑的方法可以将单个列子集化,维护矩阵格式,并维护行/列名称,而无需执行以下操作:

matrix( myMatrix[ , 5 ] , dimnames = list( rownames( myMatrix ) , colnames( myMatrix )[ 5 ] )
Run Code Online (Sandbox Code Playgroud)

r matrix subset r-faq

71
推荐指数
1
解决办法
3万
查看次数

如何删除仅包含NAs的列?

我有一个data.frame包含一些包含所有NA值的列,如何从data.frame中删除它们.

我可以使用这个功能吗?

na.omit(...) 
Run Code Online (Sandbox Code Playgroud)

指定一些额外的参数?

r dataframe na

70
推荐指数
7
解决办法
8万
查看次数

错误:ggplot2和data.table的包或命名空间加载失败

我无法打开安装ggp​​lot2和data.table包.它给我以下错误(ggplot2的例子)

> library(ggplot2)
Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]) : 
  there is no package called ‘Rcpp’
Error: package or namespace load failed for ‘ggplot2’
Run Code Online (Sandbox Code Playgroud)

在我关闭R会话之前,我能够正常使用这两个包.现在每次我尝试运行它时都会显示此错误.

我也尝试删除并重新安装它,但没有成功.

remove.packages(c("ggplot2", "data.table"))
install.packages('ggplot2', dep = TRUE)
install.packages('data.table', dep = TRUE)
Run Code Online (Sandbox Code Playgroud)

我不确定是什么问题

r ggplot2 data.table

69
推荐指数
6
解决办法
18万
查看次数