我正在尝试删除pattern
使用and 。var_1
mutate()
gsub()
由于gsub()
只需要一个字符串,我必须rowwise()
在mutate()
. 否则,它将仅使用该pattern
列中的第一条记录。
我想知道是否有任何其他方法可以在不使用的情况下达到相同的结果rowwise()
,因为它会大大减慢过程。
test <- data.frame(
var_1 = c('1AB', '2AB', '3C')
,pattern = c('AB','A','C')
)
test %>%
dplyr::rowwise() %>%
dplyr::mutate( result = sub(pattern, '', var_1)
)
Run Code Online (Sandbox Code Playgroud)
期望的结果:
# A tibble: 3 x 4
# Rowwise:
var_1 var_2 pattern result
<chr> <lgl> <chr> <chr>
1 1AB FALSE AB 1
2 2AB TRUE A 2B
3 3C FALSE C 3
Run Code Online (Sandbox Code Playgroud) 我尝试在 R 中的 a 的 2018 到 2021 行中按行不等于 0 的两个值之间插入 0 值。data.table
示例数据如下所示df1
:
ID string1 2018 2019 2020 2021 string2
1: a1 x2 3 3 0 4 si
2: a2 g3 5 5 4 0 q2
3: a3 n2 11 0 0 3 oq
4: a4 m3 3 0 9 8 mx
5: a5 2w 9 1 6 5 ix
6: a6 ps2 2 4 7 4 p2
7: a7 kg2 6 0 9 6 2q …
Run Code Online (Sandbox Code Playgroud) 我正在尝试自动计算多组列的每行平均得分。例如,一组列可以代表不同尺度的项目。这些列也被系统地命名(scale_itemnumber)。
例如,下面的虚拟数据框包含三个不同比例的项目。(可能会出现未包含每个量表的所有项目的情况,此处表示为缺失的 VAR_3)。
#library(tidyverse)
set.seed(123)
df <- tibble( G_1 = sample(1:5, size = 10000, replace = TRUE),
G_2 = sample(1:5, size = 10000, replace = TRUE),
G_3 = sample(1:5, size = 10000, replace = TRUE),
MOT_1 = sample(1:5, size = 10000, replace = TRUE),
MOT_2 = sample(1:5, size = 10000, replace = TRUE),
MOT_3 = sample(1:5, size = 10000, replace = TRUE),
VAR_1 = sample(1:5, size = 10000, replace = TRUE),
VAR_2 = sample(1:5, size = 10000, replace = TRUE), …
Run Code Online (Sandbox Code Playgroud) 输入数据的简单示例:
dataset <- data.frame("part1" = c("a", "b", "c"),
"part2" = c("x", "y", "z"),
"caption" = c("{part1} {part2}",
"{part2} {part1}",
"{part2} {part1} {part2}"),
stringsAsFactors = F)
Run Code Online (Sandbox Code Playgroud)
预期成绩:
# A tibble: 3 x 3
part1 part2 caption
<chr> <chr> <chr>
1 a x a x
2 b y y b
3 c z z c z
Run Code Online (Sandbox Code Playgroud)
下面的代码不起作用,因为.
指的是整个dataset
,而不是整行内容的数据:
dataset %>%
rowwise() %>%
mutate("caption" =
glue::glue_data(., caption)
)
Run Code Online (Sandbox Code Playgroud)
问题:如何将行(所有)内容传递给glue
?
有效的代码(明确声明的行“内容”)不是我一直在寻找的,因为caption
在我的数据集中“模式”中使用了更多的列,因此我想避免手动声明它,只需通过整行内容。
dataset %>%
rowwise() %>%
mutate("caption" = …
Run Code Online (Sandbox Code Playgroud) 通过列出列名来对列求和非常简单:
iris %>% rowwise() %>% mutate(sum = sum(Sepal.Length, Sepal.Width, Petal.Length))
但是,假设有很多列,并且您有兴趣提取包含“Sepal”的所有列,而无需手动列出它们。具体来说,我正在寻找一种与 dplyr 中的 select() 相同的方法,它允许您使用 contains()、starts_with() 等对列进行子集化。
有一些方法可以使用 mutate_all() + sum() + join() 来实现与此查询相同的结果,但我更感兴趣的是看到与以下代码类似的解决方案:
iris %>% rowwise() %>% mutate(sum = sum(contains(colnames(.), "Sepal")))
我正在使用新生成的 dplyr 1.0.0 和摘要包来生成小标题中每一行的散列。
我知道
但我想使用rowwise()
dplyr 1.0.0 中的改进。
请参阅下面的示例。任何人都知道它为什么会失败?我应该被允许消化一行,其中条目是不同类型的。
library(dplyr)
library(digest)
df <- tibble(
student_id = letters[1:4],
student_id2 = letters[9:12],
test1 = 10:13,
test2 = 20:23,
test3 = 30:33,
test4 = 40:43
)
df
#> # A tibble: 4 x 6
#> student_id student_id2 test1 test2 test3 test4
#> <chr> <chr> <int> <int> <int> <int>
#> 1 a i 10 20 30 40
#> 2 b j 11 21 31 41
#> 3 …
Run Code Online (Sandbox Code Playgroud) 在我的代码中,我想提取一系列列中的最后一个最大值,在数据帧上按行迭代。问题是我的脚本只给出了具有最大值的第一个匹配项(在本例中为第一列的名称)。关于如何更新此行以获得最后的最大值有什么建议吗?
我的数据框如下所示:
A.trust B.trust C.trust D.trust E.trust F.trust G.trust H.trust I.trust J.trust K.trust L.trust M.trust
-999 -999 -999 -999 -999 -999 -999.0 -999.0 -999.0 -999 -999 -999 -999
-999 -999 -999 -999 -999 -999 0.5 -999.0 0.5 -999 -999 -999 -999
-999 -999 -999 -999 -999 -999 -999.0 -999.0 1.0 -999 -999 -999 -999
-999 -999 -999 -999 -999 -999 -999.0 -999.0 -999.0 -999 -999 -999 -999
-999 -999 -999 -999 -999 -999 -999.0 -999.0 -999.0 -999 -999 -999 -999 …
Run Code Online (Sandbox Code Playgroud)