小编TAR*_*man的帖子

删除字符串开头和结尾的所有分隔符

在我折叠行并使用分号分隔之后,我想删除字符串前后的分号.多个分号代表单元格中的空白.例如,崩溃后观察可能如下所示:

;TX;PA;CA;;;;;;;
Run Code Online (Sandbox Code Playgroud)

我希望单元格看起来像这样:

TX;PA;CA
Run Code Online (Sandbox Code Playgroud)

这是我的崩溃代码:

new_df <- group_by(old_df, unique_id) %>% summarize_each(funs(paste(., collapse = ';')))
Run Code Online (Sandbox Code Playgroud)

如果我尝试gsub分号,它会删除所有分号.如果我删除结束字符,它只删除一个分号.关于如何在开始和结束时删除所有内容的任何想法,但将其留在观察之间?谢谢.

regex r

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

有什么作用!!R 中的运算符均值

有人可以解释一下,我们需要什么!!!!!或者{{}}需要什么操作员吗rlang?我试图了解更多有关准引用的知识,但没有得到任何结果。

我已经在 Stack 上找到了几篇关于 curly-curly 运算符的帖子,并且了解我们{{在将数据帧的变量(或对象的其他子对象)传递到函数中时使用它。但在阅读了有关引用/取消引用的内容后,我对所有这些运算符及其用法完全感到困惑。

为什么我们需要它,为什么有些函数没有它就无法读取参数,最后,它们实际上是如何工作的?

如果您以最简单的方式给出答案,即使我也能理解(也许有例子?),我将不胜感激。

r quote tidyverse rlang quasiquotes

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

在R中,我可以使table()函数返回命名元素中的NA值的数量吗?

我使用R来汇总报告的大量数据.我希望能够使用lapply()table()函数生成表的列表,从中我可以提取所需的统计信息.有很多这些,所以我写了一个函数来做到这一点.我的问题是我很难返回missing(NA)值的数量,即使我在每个表中都有,因为我无法弄清楚如何告诉R我希望元素table()保存NA值的数量.据我所知,R是"命名"那个元素NA......我不能称之为.

我试图避免写一些复杂的陈述,我说的是which(is.na(names(element[1]))) | names(element[1])=="var_I_want"因为我觉得这只是罗嗦.我希望有一些方法可以告诉R NA用每个表中的变量标记一个字符名称,或者告诉它选择标记的变量NA,但我还没有太多运气.

最小的例子:

example <- data.frame(ID=c(10,20,30,40,50),
                      V1=c("A","B","A",NA,"C"),
                      V2=c("Dog","Cat",NA,"Cat","Bunny"),
                      V3=c("Yes","No","No","Yes","No"),
                      V4=c("No",NA,"No","No","Yes"),
                      V5=c("No","Yes","Yes",NA,"No"))

varlist <- c("V1","V2","V3","V4","V5")

list_o_tables <- lapply(X=example[varlist],FUN=table,useNA="always")

list(V1=list_o_tables[["V1"]]["A"],
     V2=list_o_tables[["V2"]]["Cat"],
     V3=list_o_tables[["V3"]]["Yes"],
     V4=list_o_tables[["V4"]]["Yes"],
     V5=list_o_tables[["V5"]]["Yes"])
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

$V1
A 
2 

$V2
Cat 
  2 

$V3
Yes 
  2 

$V4
Yes 
  1 

$V5
Yes 
  2
Run Code Online (Sandbox Code Playgroud)

我想要的是什么:

$V1
A     <NA>
2       1

$V2
Cat   <NA>
  2     1

$V3
Yes   <NA> 
  2     0

$V4
Yes   <NA> 
  1     1

$V5 …
Run Code Online (Sandbox Code Playgroud)

r na

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

在R的data.table中,data.table的关键如何保存到使用.SD引用的子集中?

我正在使用该data.table软件包来完成一些分析.我正在采取的其中一个步骤涉及使用该by =函数来获取聚合统计信息.但是,必须根据每个by子集中的唯一结果计算聚合.我一直在使用unique和键来确保每个by组都包含不同的记录.有点像下面的东西:

dt_new <- dt_old[,uFunc_MyFunction(x = unique(.SD)),by = grouping_var]
Run Code Online (Sandbox Code Playgroud)

我注意到键的关键.SD似乎根据键dt_oldby =语句的不同而有所不同.显然,这对我生成的子集是否唯一有影响.

我希望得到一些清晰度,所以我写了下面的内容.

library(data.table)
set.seed(1554)
dt_example <- data.table(id = 1:50,
                         site = sample(x = c("A","B","C"),
                                       size = 50,
                                       replace = TRUE,
                                       prob = c(0.4,0.4,0.2)),
                         group = sample(x = c("Eta","Mu","Omicron","Psi"),
                                        size = 50,
                                        replace = TRUE),
                         team = sample(x = 1:3,
                                       size = 50,
                                       replace = TRUE,
                                       prob = c(0.2,0.3,0.5)))

setkey(x = dt_example,
       group,
       team)

> …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

具有复位条件的R累积和

我在data.frame中有一个数字向量,如下所示.

df <- data.frame(a = c(1,2,3,4,2,3,4,5,8,9,10,1,2,1))
Run Code Online (Sandbox Code Playgroud)

我需要创建一个新列,它提供比其前任更大的条目的运行计数.生成的列向量应为:

0,1,2,3,0,1,2,3,4,5,6,0,1,0
Run Code Online (Sandbox Code Playgroud)

我的尝试是创建一个diffs的"flag"列,以便在值更大时进行标记.

df$flag <- c(0,diff(df$a)>0)
> df$flag
 [1] 0 1 1 1 0 1 1 1 1 1 1 0 1 0
Run Code Online (Sandbox Code Playgroud)

然后我可以应用一些dplyr组/ sum魔法几乎得到正确的答案,除了当flag == 0时总和没有重置:

df %>% group_by(flag) %>% mutate(run=cumsum(flag))

    a flag run
1   1    0   0
2   2    1   1
3   3    1   2
4   4    1   3
5   2    0   0
6   3    1   4
7   4    1   5
8   5    1   6
9   8    1   7
10  9    1 …
Run Code Online (Sandbox Code Playgroud)

r cumulative-sum dplyr

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

使用显式参数时,为什么R的attributes()函数失败?

我正在使用RODBCparallel针对某些内部报告对数据系统进行多次查询.为了便于建立新连接,我将从RODBC对象中提取连接字符串.为此,我计划使用attributes().但是,我遇到了一个我不理解的行为.最小的工作示例如下:

> example.data <- data.frame(letters = sample(x = LETTERS,size = 20,replace = T),
+                            numbers = sample(x = 0:9,size = 20,replace = T))
> 
> attributes(obj = example.data)
Error in attributes(obj = example.data) : 
  supplied argument name 'obj' does not match 'x'
> attributes(example.data)
$names
[1] "letters" "numbers"

$row.names
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

$class
[1] …
Run Code Online (Sandbox Code Playgroud)

attributes r rstudio

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

合并两个R数据帧并识别每行的来源

我处于这样一种情况,我需要将两个数据框合并在一起,每个数据框包含一个关于研究主题的观察.不幸的是,数据捕获系统允许最终用户在两个屏幕上输入一些变量(例如,性别是在两个时间点捕获的,不应该改变).没有数据库端检查来确认屏幕之间的数据是否一致,因此我们正在检查后处理.

我会喜欢做的是使用内置R中merge()的功能合并的数据帧,与all=TRUE选项,让我得到两排,其中共享变量不匹配,然后在所得到的数据帧中的单个列告诉我行的来源(合并中的X或Y).就像我所知道的那样,在merge()函数中没有类似的东西,所以我正在尝试编写自己的包装器来merge()做到这一点.

例:

example_df1 <- data.frame(subject_id=c(101,102,103,104,105),
                          gender=c("M","F","M","M","F"),
                          weight=c(120,130,110,114,144),
                          score=c(10,12,11,13,11))

example_df2 <- data.frame(subject_id=c(101,102,103,104,105),
                          gender=c("M","M","M","M","F"),
                          weight=c(120,130,110,117,144),
                          site1=c(13,18,23,12,4),
                          site2=c(3,7,8,11,0),
                          site3=c(31,28,12,29,40))

merge(x=example_df1,y=example_df2,all=TRUE)

  subject_id gender weight score site1 site2 site3
1        101      M    120    10    13     3    31
2        102      F    130    12    NA    NA    NA
3        102      M    130    NA    18     7    28
4        103      M    110    11    23     8    12
5        104      M    114    13    NA    NA    NA
6        104      M    117    NA …
Run Code Online (Sandbox Code Playgroud)

merge r

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