在R中,是否可以从正则表达式匹配中提取组捕获?据我所知,没有一个grep
,grepl
,regexpr
,gregexpr
,sub
,或gsub
返回组拍摄.
我需要从编码的字符串中提取键值对:
\((.*?) :: (0\.[0-9]+)\)
Run Code Online (Sandbox Code Playgroud)
我总是可以做多个全匹配greps,或做一些外部(非R)处理,但我希望我能在R中完成所有操作.是否有一个功能或包提供这样的功能来执行此操作?
我想将格式良好的数据帧打印到纸上,最好是从脚本中打印出来.(我正在尝试使用仪器收集数据并使用R脚本自动处理和打印).
现在我可以使用数据框写入文本文件write.table()
,但这有两个问题:
我正在寻找一般策略而不是特定代码(尽管代码也很棒!).Sweave会是最方便的解决方案吗?原则上我可以socketConnection()
用来打印到打印机 - 如果是这样,我在哪里可以学习如何使用它(我没有发现文档非常有帮助).
我知道如何添加列表列:
> 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中有以下数据框:
> 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) 我有一个需要,我想可以满足aggregate
或reshape
,但我不能完全弄明白.
我有一个名单(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)
我怎么做到这一点?
我正在查看这个答案中的基准,并希望将它们与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) 我们如何在数据帧的每个组中生成唯一的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包magrittr
,比如%>%
当我在编程R封装,应避免?
更具体地说,我想知道使用管道运算符是否会导致编码冲突或(正面或负面)影响性能.我正在寻找这类案件的具体具体例子.
在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")
有点帮助,但我希望两列彼此相邻.