在我折叠行并使用分号分隔之后,我想删除字符串前后的分号.多个分号代表单元格中的空白.例如,崩溃后观察可能如下所示:
;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分号,它会删除所有分号.如果我删除结束字符,它只删除一个分号.关于如何在开始和结束时删除所有内容的任何想法,但将其留在观察之间?谢谢.
有人可以解释一下,我们需要什么!!,!!!或者{{}}需要什么操作员吗rlang?我试图了解更多有关准引用的知识,但没有得到任何结果。
我已经在 Stack 上找到了几篇关于 curly-curly 运算符的帖子,并且了解我们{{在将数据帧的变量(或对象的其他子对象)传递到函数中时使用它。但在阅读了有关引用/取消引用的内容后,我对所有这些运算符及其用法完全感到困惑。
为什么我们需要它,为什么有些函数没有它就无法读取参数,最后,它们实际上是如何工作的?
如果您以最简单的方式给出答案,即使我也能理解(也许有例子?),我将不胜感激。
我使用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) 我正在使用该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_old和by =语句的不同而有所不同.显然,这对我生成的子集是否唯一有影响.
我希望得到一些清晰度,所以我写了下面的内容.
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) 我在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) 我正在使用RODBC并parallel针对某些内部报告对数据系统进行多次查询.为了便于建立新连接,我将从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) 我处于这样一种情况,我需要将两个数据框合并在一起,每个数据框包含一个关于研究主题的观察.不幸的是,数据捕获系统允许最终用户在两个屏幕上输入一些变量(例如,性别是在两个时间点捕获的,不应该改变).没有数据库端检查来确认屏幕之间的数据是否一致,因此我们正在检查后处理.
我会喜欢做的是使用内置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) r ×7
attributes ×1
data.table ×1
dplyr ×1
merge ×1
na ×1
quasiquotes ×1
quote ×1
regex ×1
rlang ×1
rstudio ×1
tidyverse ×1