小编Fra*_*ank的帖子

R中的正则表达式组捕获具有多个捕获组

在R中,是否可以从正则表达式匹配中提取组捕获?据我所知,没有一个grep,grepl,regexpr,gregexpr,sub,或gsub返回组拍摄.

我需要从编码的字符串中提取键值对:

\((.*?) :: (0\.[0-9]+)\)
Run Code Online (Sandbox Code Playgroud)

我总是可以做多个全匹配greps,或做一些外部(非R)处理,但我希望我能在R中完成所有操作.是否有一个功能或包提供这样的功能来执行此操作?

regex r capture capture-group

87
推荐指数
5
解决办法
4万
查看次数

如何打印(到纸)格式良好的数据框

我想将格式良好的数据帧打印到纸上,最好是从脚本中打印出来.(我正在尝试使用仪器收集数据并使用R脚本自动处理和打印).

现在我可以使用数据框写入文本文件write.table(),但这有两个问题:

  1. 生成的文本文件格式不正确(列不一定与其标题对齐)和
  2. 我不知道如何从R内打印文本文件.

我正在寻找一般策略而不是特定代码(尽管代码也很棒!).Sweave会是最方便的解决方案吗?原则上我可以socketConnection()用来打印到打印机 - 如果是这样,我在哪里可以学习如何使用它(我没有发现文档非常有帮助).

formatting r dataframe

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

创建一个data.frame,其中列是列表

我知道如何添加列表列:

> df <- data.frame(a=1:3)
> df$b <- list(1:1, 1:2, 1:3)
> df
  a       b
1 1       1
2 2    1, 2
3 3 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

这有效,但不是:

> df <- data.frame(a=1:3, b=list(1:1, 1:2, 1:3))
Error in data.frame(1L, 1:2, 1:3, check.names = FALSE, stringsAsFactors = TRUE) : 
  arguments imply differing number of rows: 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

为什么?

另外,有没有办法df在一次调用中创建(上面)data.frame

r list dataframe

69
推荐指数
4
解决办法
3万
查看次数

unique()表示多个变量

我在R中有以下数据框:

> str(df)
'data.frame':   545227 obs. of  15 variables:
 $ ykod : int  93 93 93 93 93 93 93 93 93 93 ...
 $ yad  : Factor w/ 42 levels "BAKUGAN","BARBIE",..: 30 30 30 30 30 30 30 30 30 30 ...
 $ per  : Factor w/ 3 levels "2 AYLIK","3 AYLIK",..: 3 3 3 3 3 3 3 3 3 3 ...
 $ donem: int  201101 201101 201101 201101 201101 201101 201101 201101 201101 201101 ...
 $ sayi …
Run Code Online (Sandbox Code Playgroud)

r unique

66
推荐指数
4
解决办法
14万
查看次数

通过唯一标识符进行聚合并将相关值连接到字符串中

我有一个需要,我想可以满足aggregatereshape,但我不能完全弄明白.

我有一个名单(brand)列表和随附的ID号(id).这些数据是长形式的,因此名称可以有多个ID.我想通过名称(brand)去重复,并将多个可能id的连接到由注释分隔的字符串中.

例如:

brand            id 
RadioShack       2308
Rag & Bone       4466
Ragu             1830
Ragu             4518
Ralph Lauren     1638
Ralph Lauren     2719
Ralph Lauren     2720
Ralph Lauren     2721
Ralph Lauren     2722 
Run Code Online (Sandbox Code Playgroud)

应成为:

RadioShack       2308
Rag & Bone       4466
Ragu             1830,4518
Ralph Lauren     1638,2719,2720,2721,2722
Run Code Online (Sandbox Code Playgroud)

我怎么做到这一点?

aggregate r concatenation

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

为什么诊断功能这么慢?[在R 3.2.0或更早版本]

我正在查看这个答案中的基准,并希望将它们与diag(用于不同的答案)进行比较.不幸的是,似乎diag需要很长时间:

nc  <- 1e4
set.seed(1)
m <- matrix(sample(letters,nc^2,replace=TRUE), ncol = nc)

microbenchmark(
  diag = diag(m),
  cond = m[row(m)==col(m)],
  vec  = m[(1:nc-1L)*nc+1:nc],
  mat  = m[cbind(1:nc,1:nc)],
times=10)
Run Code Online (Sandbox Code Playgroud)

评论:我测试了这些identical.我从这个家庭作业问题的答案中选了一个"cond" .结果类似于整数矩阵,1:26而不是letters.

结果:

Unit: microseconds
 expr         min          lq         mean       median          uq         max neval
 diag  604343.469  629819.260  710371.3320  706842.3890  793144.019  837115.504    10
 cond 3862039.512 3985784.025 4175724.0390 4186317.5260 4312493.742 4617117.706    10
  vec     317.088     329.017     432.9099     350.1005     629.460     651.376    10
  mat     272.147 …
Run Code Online (Sandbox Code Playgroud)

r matrix diagonal

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

为数据帧的每个组内的行创建一个序列号(计数器)

我们如何在数据帧的每个组中生成唯一的ID号?这里有一些按"personid"分组的数据:

personid date measurement
1         x     23
1         x     32
2         y     21
3         x     23
3         z     23
3         y     23
Run Code Online (Sandbox Code Playgroud)

我希望为"personid"定义的每个子集中的每一行添加一个唯一值的id列,始终以1.这是我想要的输出:

personid date measurement id
1         x     23         1
1         x     32         2
2         y     21         1
3         x     23         1
3         z     23         2
3         y     23         3
Run Code Online (Sandbox Code Playgroud)

我感谢任何帮助.

r dataframe

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

我应该避免使用管道操作员编程包吗?

是否有任何客观原因,为什么管道运营商从R包magrittr,比如%>%当我在编程R封装,应避免?

更具体地说,我想知道使用管道运算符是否会导致编码冲突或(正面或负面)影响性能.我正在寻找这类案件的具体具体例子.

r magrittr

22
推荐指数
3
解决办法
2505
查看次数

R是否有类似引用的运算符,如Perl的qw()?

任何人都知道R是否有类似引号的运算符,如Perl qw()用于生成字符向量?

perl r

21
推荐指数
4
解决办法
4534
查看次数

在RMarkdown文档中调整使用kable()创建的表的宽度

在knitr中使用kable()函数创建表时,是否可以调整列的宽度?

对于具有两列的表,这样的块产生一个占据文档整个宽度的表.我想让列更窄. 这可以用kable()完成还是需要另一个包?

这个rmarkdown块

```{r}
df <- data.frame(x = 1:10,
           y = 11:20)
library(knitr)
kable(df)
```
Run Code Online (Sandbox Code Playgroud)

生成此表 在此输入图像描述

左对齐kable(df, align = "l")有点帮助,但我希望两列彼此相邻.

r knitr r-markdown

20
推荐指数
3
解决办法
2万
查看次数