小编Ani*_*yal的帖子

如何以交替顺序在 R 中使用矢量化函数?

假设我有一个x包含n元素的向量。我想使用任何矢量化函数,比如说cumprod,在 的每个备用数上x,即每 1、3、5 等等,以及 2、4、6 等等。我正在添加一个 reprex 并尝试了代码。该代码有效,但似乎我不必要地走了很长的路,并且可以缩短代码。是真的吗?

x <- 5:14

cumprod((x * (seq_along(x) %% 2)) + (seq_along(x)-1) %% 2) * seq_along(x) %% 2 +
  cumprod((x * ((seq_along(x)-1) %% 2)) + seq_along(x) %% 2) * (seq_along(x)-1) %% 2
#>  [1]     5     6    35    48   315   480  3465  5760 45045 80640
Run Code Online (Sandbox Code Playgroud)

这里cumprod只是一个示例函数。我可能还必须以交替顺序使用其他功能。

r sequence modulo

10
推荐指数
4
解决办法
566
查看次数

累积 R 中每个可能组合的值

假设我有数据test(给定的 dput),其中 list-col 说items

test <- structure(list(items = list('a', c('b', 'c'), c('d', 'e'), 'f', c('g', 'h')),
               ID = c(1,1,1,2,2)), row.names = c(NA, 5L), class = "data.frame")

library(tidyverse)
test %>% group_by(ID) %>%
  mutate(dummy = accumulate(items, ~paste(.x, .y)))
Run Code Online (Sandbox Code Playgroud)

我得到一个像这样的 list-col 输出

  items ID        dummy
1     a  1            a
2  b, c  1     a b, a c
3  d, e  1 a b d, a c e
4     f  2            f
5  g, h  2     f g, f h …
Run Code Online (Sandbox Code Playgroud)

expand r dataframe accumulate tidyverse

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

如何将向量拆分为特定值的列表

''当遇到空值时,如何将以下向量拆分为包含每个新元素的列表?

例如给定以下输入 -

x <- c("abc", "", "a", "b", "c", "", "ab", "ac", "", "a", "a", "a", 
"a", "", "b")

x
 [1] "abc" ""    "a"   "b"   "c"   ""    "ab"  "ac"  ""    "a"   "a"   "a"   "a"   ""    "b"  
Run Code Online (Sandbox Code Playgroud)

我想要以下列表作为输出

list("abc", c("a", "b", "c"), c("ab", "ac"), c("a", "a", "a", 
"a"), "b")

[[1]]
[1] "abc"

[[2]]
[1] "a" "b" "c"

[[3]]
[1] "ab" "ac"

[[4]]
[1] "a" "a" "a" "a"

[[5]]
[1] "b"
Run Code Online (Sandbox Code Playgroud)

r list readfile

9
推荐指数
1
解决办法
501
查看次数

确定列之间或字符串中的序列长度 - 并粘贴结果

我正在处理这样的数据:

> df
  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1  1  0  0  0  1  1  0  0  1   1
2  1  1  1  0  0  0  0  1  0   1
3  1  1  0  0  1  0  0  1  0   1
4  1  0  0  0  0  0  0  1  1   1
5  0  0  0  1  0  0  1  1  1   1
6  0  0  1  1  0  0  1  0  1   0
Run Code Online (Sandbox Code Playgroud)

dput(df) …

r

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

正则表达式仅用于替换括号外的特定字符

我正在寻找正则表达式(最好是 in R),它可以用 say 替换(任意数量的)特定字符;say;;但仅当文本字符串内的括号内不存在()

注意: 1. 括号内也可能存在多个替换字符

2.数据/向量中没有嵌套括号

例子

  • text;othertext 替换为 text;;othertext
  • text;other(texttt;some;someother);more要替换为text;;other(texttt;some;someother);;more. (即;仅在外部()被替换文本替换)

如果需要澄清,我会尝试解释

in_vec <- c("abcd;ghi;dfsF(adffg;adfsasdf);dfg;(asd;fdsg);ag", "zvc;dfasdf;asdga;asd(asd;hsfd)", "adsg;(asdg;ASF;DFG;ASDF;);sdafdf", "asagf;(fafgf;sadg;sdag;a;gddfg;fd)gsfg;sdfa")

in_vec
#> [1] "abcd;ghi;dfsF(adffg;adfsasdf);dfg;(asd;fdsg);ag"
#> [2] "zvc;dfasdf;asdga;asd(asd;hsfd)"             
#> [3] "adsg;(asdg;ASF;DFG;ASDF;);sdafdf"           
#> [4] "asagf;(fafgf;sadg;sdag;a;gddfg;fd)gsfg;sdfa"
Run Code Online (Sandbox Code Playgroud)

预期输出(手动计算)

[1] "abcd;;ghi;;dfsF(adffg;adfsasdf);;dfg;;(asd;fdsg);;ag" 
[2] "zvc;;dfasdf;;asdga;;asd(asd;hsfd)"             
[3] "adsg;;(asdg;ASF;DFG;ASDF;);;sdafdf"            
[4] "asagf;;(fafgf;sadg;sdag;a;gddfg;fd)gsfg;;sdfa"
Run Code Online (Sandbox Code Playgroud)

regex r string-substitution gsub

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

将一个 id 列包含到 split.default 结果列表的所有元素中的规范方法

我根据列名将 data.frame 拆分为一个列表。我想要的是将 id 列 ( id) 不仅包含在一个项目中,而且包含在结果列表的所有元素中。

目前我正在通过随后将id列绑定到列表的所有项目mapbind_cols(通过Map/ do.call/mapply等替代。我自己也可以这样做)。我想知道的是有什么直接的规范方法可以直接执行此操作,可能直接使用split.default其他函数的函数参数或直接通过其他函数,从而节省两三个额外步骤。

可重现的例子

df <- data.frame(
  stringsAsFactors = FALSE,
                id = c("A", "B", "C"),
             nm1_a = c(928L, 476L, 928L),
             nm1_b = c(61L, 362L, 398L),
             nm2_a = c(965L, 466L, 369L),
             nm2_b = c(240L, 375L, 904L),
             nm3_a = c(429L, 730L, 788L),
             nm3_b = c(99L, 896L, 540L),
             nm3_c = c(463L, 143L, 870L)
      )

df
#>   id nm1_a nm1_b nm2_a nm2_b …
Run Code Online (Sandbox Code Playgroud)

split r list

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

如何从单个项目列表中删除未命名元素?

这听起来可能是一个非常初学者的问题,而且它也可能是一个非常基本和愚蠢的问题,但不知何故,我在做这件事时感到头疼。

假设我有一个单项列表

v <- as.list("1, 2, 3,")

v
[[1]]
[1] "1, 2, 3,"

Run Code Online (Sandbox Code Playgroud)

现在我想将其所有项目拆分为单独的项目

v2 <- lapply(str_split(v, pattern = ","), trimws)
v2
[[1]]
[1] "1" "2" "3" "" 
Run Code Online (Sandbox Code Playgroud)

现在我想""从这个列表的第一个也是唯一一个项目中删除它而不使用[]?

string r list

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

如何系统地将多列作为多列的函数进行变异?

我有一些随时间收集的变量。tibble 的一个非常简化的版本看起来像这样。

df = tribble(
~id, ~varA.t1, ~varA.t2, ~varB.t1, ~varB.t2,
'row_1', 5, 10, 2, 4,
'row_2', 20, 50, 4, 6
)
Run Code Online (Sandbox Code Playgroud)

我想系统地创建一组新的变量,varC以便varC.t#= varA.t#/ varB.t#where#是 1、2、3 等(类似于在上面的 tibble 中设置列​​名的方式)。

我如何使用类似mutate或 的东西across来做到这一点?

r dplyr mutate across

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

如何找到半径 250 米附近的位置

我有以下数据框:

df <- tribble(~ id,       ~ lon,              ~ lat,
                 1, -56.2112038,         -34.8358207,
                 2, -55.96403429999999,  -34.7260945,
                 3, -56.155449,          -34.9030824,
                 4, -55.2711453,         -34.8665964,
                 5, -56.210083,          -34.865306,
                 6, -56.0575984,         -34.8775368,
                 7, -54.9485448,         -34.9260087,
                 8, -56.146228,          -34.907991,
                 9, -56.1953583,         -34.8643363,
                 10, -56.1821508,        -34.8697975,
                 11, -56.1498662,        -34.8849854,
                 12, -56.1469807,        -34.9119864,
                 13, -56.155763,         -34.9154153,
                 14, -56.09861610000001, -34.8896448,
                 15, -56.15526680000001, -34.9189892,
                 16, -56.0582918,        -34.8873091,
                 17, -54.9529404,        -34.9221666,
                 19, -106.6971588,       -35.1366719,
                 20, -56.1616095,        -34.8937622)
Run Code Online (Sandbox Code Playgroud)

我想要实现的是添加一个新列,说明在彼此相距 250 米的半径/距离内有多少个 ID。这个想法是取一行,“查看”坐标,看看该点是否在其他 id 的 250 米半径内以及它们中有多少。

r tidy geolocation geospatial dplyr

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

基于固定日期间隔大小的移动窗口变异新列,在 R 中

我有 R 中一位患者的数据,其中显示了他们在某种情况下测试呈阳性的日期。数据如下所示:

      date  positive
2005-02-22      yes
2005-04-26       no
2005-08-02      yes
2005-10-04       no
2005-12-06      yes
2006-03-14       no
2006-06-06       no
2006-09-12      yes
2006-12-19      yes
2007-03-27      yes
Run Code Online (Sandbox Code Playgroud)

现在我介绍一个新的定义。如果“当前测试为阳性,并且在之前 365 天内>=50% 的测试为阳性”,则将患者的状况定义为“慢性阳性”。所以我想创建一个输出数据集,告诉我患者在每个日期是否长期呈阳性。例如,输出应如下所示(例如,在 2006-09-12 上,它们是“阳性”但不是“慢性阳性”,因为在过去 365 天内的 4 次访问中有 3 次是阴性的):

      date  positive  chronic
2005-02-22      yes        no
2005-04-26       no        no
2005-08-02      yes       yes
2005-10-04       no        no
2005-12-06      yes       yes
2006-03-14       no        no
2006-06-06       no        no
2006-09-12      yes        no
2006-12-19      yes        no
2007-03-27      yes       yes
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?在感兴趣的每一行中,我需要能够查看之前的行(在过去 365 天内)并评估它们的阳性比例。我想我可以使用lead/lag …

r lag conditional-statements dplyr rolling-computation

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