小编Ani*_*yal的帖子

在同一个变异函数 dplyr 中使用滞后结果

我想使用dplyr+ 滞后函数复制以下公式 R。代码工作到每组的第二行,然后继续给我 0

预测 = 滞后(价值,1)*(1-滞后(损耗)/52)

状况:

  1. 预测的第一个值应该是空的,因为我们已经有了值。
  2. 第二行根据 Attrition 和 Value 列的先前值进行计算。
  3. 第三行之前的值应分别从预测(不是值列)和损耗列中选取。

我从第 3 行开始得到 0。下面是我的复制代码。

data <- data %>% group_by(Patch) %>% mutate(id = row_number())
data <- data %>% group_by(Patch) %>% mutate(forecast = lag(Value,1)*(1-lag(Attrition,1)/52))

tbl_df(data)
# A tibble: 12 x 6
   Patch Week       Value Attrition    id forecast
   <chr> <date>     <dbl>     <dbl> <int>    <dbl>
 1 11P11 2021-06-14     2     0.075     1   NA    
 2 11P11 2021-06-21     0     0.075     2    2.00 
 3 11P11 2021-06-28     0     0.075     3    0    
 4 …
Run Code Online (Sandbox Code Playgroud)

r data-analysis accumulate dplyr rolling-computation

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

根据前一行中的值计算单元格中的值的快速方法

我希望有一种快速的方法来处理行式计算,其中单元格的值取决于不同列的前几行中的值,更喜欢矢量化而不是循环遍历各个行(从这里开始)。

假设我有以下数据集dt和一个constant(加载的库是data.table,dplyrpurrr

dt <- structure(list(var1 = c(-92186.7470607738, -19163.5035325072, 
-18178.8396858014, -9844.67882723287, -16494.7802822178, -17088.0576319257
), var2 = c(-3.12, NA, NA, NA, NA, NA), var3 = c(1, NA, NA, NA, 
NA, NA)), class = c("data.table", "data.frame"), row.names = c(NA, 
-6L))

constant <- 608383


print(dt)
         var1  var2 var3
1: -92186.747 -3.12    1
2: -19163.504    NA   NA
3: -18178.840    NA   NA
4:  -9844.679    NA   NA
5: -16494.780    NA   NA
6: -17088.058    NA   NA …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table rolling-computation purrr

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

如何基于 R 中的两列创建虚拟对象

假设我有一个数据框:性别可以将 F 作为女性或 M 作为男性种族可以将 A 作为亚洲人,W 作为白人,B 作为黑人,H 作为西班牙裔

| id | Gender | Race |
| --- | ----- | ---- |
| 1   | F    | W |
| 2   | F    | B |
| 3   | M    | A |
| 4   | F    | B |
| 5   | M    | W |
| 6   | M    | B |
| 7   | F    | H |
Run Code Online (Sandbox Code Playgroud)

我想有一组基于性别和种族的列作为虚拟对象,数据框应该像

| id | Gender | Race …
Run Code Online (Sandbox Code Playgroud)

r dummy-variable

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

rownames_to_column 在 rowwise() 正确后不起作用

我有这个 df:

df <- structure(list(a = 1:5, b = 6:10, c = 11:15, d = c("a", "b", 
"c", "d", "e"), e = 1:5), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))

      a     b     c d         e
  <int> <int> <int> <chr> <int>
1     1     6    11 a         1
2     2     7    12 b         2
3     3     8    13 c         3
4     4     9    14 d         4
5     5    10    15 e         5
Run Code Online (Sandbox Code Playgroud)

rownames_to_column 作品:

df %>% 
  column_to_rownames(var="d") %>% 
  rownames_to_column(var= "d") …
Run Code Online (Sandbox Code Playgroud)

r rowname dplyr rowwise tibble

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

了解累加函数的工作原理

我阅读了使用手册accumulate,说它是一个 2 参数函数。我不明白给定的例子:

1:5 %>% accumulate(`+`)
#> [1]  1  3  6 10 15
Run Code Online (Sandbox Code Playgroud)

如果accumulate是一个 2 参数函数,它输出的第一个元素应该是3?因为1+2=3,为什么第一个元素可以作为输出?

r accumulate purrr

3
推荐指数
1
解决办法
226
查看次数

迭代 R 中交叉表的指定列

我希望在同一个数据集中运行几十个交叉表,并使用一组结果变量。我有一个函数可以提供我想要的交叉表:

second_table = function(dat, variable1, variable2){
  
  dat %>% 
  tabyl({{variable1}}, {{variable2}}, show_na = FALSE) %>% 
  adorn_percentages("row") %>% 
  adorn_pct_formatting(digits = 1) %>% 
  adorn_ns() 
  
}
Run Code Online (Sandbox Code Playgroud)

以 mtcars 数据集为例,该函数为我提供了我想要的单个变量:

cars = datasets::mtcars

second_table(cars, cyl, vs)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

不过,我真正想要的是创建很多这样的表,其中 dat = cars 和 variable2 = vs 参数保持不变,但使用几个不同的列作为 variable1 参数。出于本示例的目的,假设它是以下 4 个变量:

variables = c("cyl", "am", "gear", "carb")
Run Code Online (Sandbox Code Playgroud)

我不确定 purrr 包中的 map 函数是否是执行此操作的最佳方法,但是我一直没有成功尝试使用 map 和 map_at 等相关函数进行各种不同的操作。如果有办法用 purrr 做到这一点,那么这就是我更愿意做的,但我愿意接受任何建议。我真的不在乎输出是什么样子,只是我可以得到我需要的所有交叉表,而无需多次复制和粘贴代码。

任何帮助是极大的赞赏!

r purrr janitor

3
推荐指数
1
解决办法
91
查看次数

我们实际上可以将两组多个变量传递到 dplyr 中的 mutate 中吗

这个问题虽然有三个答案,但在我思考这个问题时却引起了我的怀疑。虽然我知道问题可以通过其他方法解决(特别是使用 purrr 或应用函数组),但我不确定它实际上可以通过吗mutate(across(...?为了清楚起见,我在这里重现这个问题。注意:我不是在寻找它的答案,而是只是对我的疑问的答案是否两组变量实际上可以通过 mutate/across 传递

有两组变量(一组没有后缀,一组有后缀avail)。

df <- tibble(a = c(0, 1, 0, 0, 0),
       a_avail = c(1, 1, 1, 0, 0),
       b = c(1, 1, 1, 0, 0),
       b_avail = c(1, 0, 0, 1, 0))
# A tibble: 5 x 4
      a a_avail     b b_avail
  <dbl>   <dbl> <dbl>   <dbl>
1     0       1     1       1
2     1       1     1       0
3     0       1     1       0
4     0       0     0       1
5     0       0     0       0 …
Run Code Online (Sandbox Code Playgroud)

r dplyr across

3
推荐指数
1
解决办法
957
查看次数

如何在 dplyr::across 中的 .names 参数内使用字符串操作函数

虽然我试图搜索它是否重复,但我找不到类似的问题。(虽然有类似的,但和我的要求有些不同)

我的问题是,我们是否可以使用字符串操作函数,substr例如. 作为一个可重现的例子,考虑这个stringr::str_remove.namesdplyr::across

library(dplyr)
iris %>%
  summarise(across(starts_with('Sepal'), mean, .names = '{.col}_mean'))

  Sepal.Length_mean Sepal.Width_mean
1          5.843333         3.057333
Run Code Online (Sandbox Code Playgroud)

现在我的问题是我想重命名输出列,str_remove(.col, 'Sepal')以便我的输出列名称只是Length.meanWidth.mean。我为什么问这个问题,因为这个论点的描述表明

.names
描述如何命名输出列的粘合规范。这可以使用 {.col} 代表选定的列名称,并使用 {.fn} 代表正在应用的函数的名称。默认值 (NULL) 相当于单函数情况下的“{.col}”,以及列表用于 .fns 的情况下的“{.col}_{.fn}”。

我尝试了很多可能性,包括以下内容,但这些都不起作用

library(tidyverse)
library(glue)
iris %>%
  summarise(across(starts_with('Sepal'), mean, 
                   .names = glue('{xx}_mean', xx = str_remove(.col, 'Sepal'))))

Error: Problem with `summarise()` input `..1`.
x argument `str` should be a character vector (or an object coercible to)
i Input `..1` is …
Run Code Online (Sandbox Code Playgroud)

r dplyr across r-glue

3
推荐指数
1
解决办法
436
查看次数

当每个条件的总数不同时计算平均值

我正在与 R 合作。

在这里,我分享了我的数据样本...

structure(list(column_a = c("1_1", "1_1", "1_2", "1_2", "1_2", 
"2_1", "2_2", "2_2", "3_1", "3_2"), column_b = c("kitchen", "tree", 
"hate", "kind", "table", "dog", "human", "car", "moon", "rage"
)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"
))

   column_a column_b
1       1_1  kitchen
2       1_1     tree
3       1_2     hate
4       1_2     kind
5       1_2    table
6       2_1      dog
7       2_2    human
8       2_2      car
9       3_1     moon
10      3_2     rage
Run Code Online (Sandbox Code Playgroud)

我需要计算条件(1_1、1_2 等)产生的总单词的平均值。我唯一的问题是以“_1”结尾的条件总数为 50,以“_2”结尾的条件总数为 100。

因此,由于条件“1_1”产生了两个词(在样本中),我应该通过除以 50 来计算平均值。这是 2/50 = …

r mean

3
推荐指数
1
解决办法
42
查看次数

ggplot2 图表轴中的印度风格千位分隔符

印度风格的千位分隔符就是这样使用的。第一个分隔符为 3 位数字(千),之后每两位数字分隔符。

1
10
100
1,000
10,000
1,00,000
10,00,000
1,00,00,000
10,00,00,000
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过使用更改/格式化 ggplot2 图表中的轴 scale_y_continuous(labels = scales::comma)

但是,如何根据上述印度格式更改 r ggplot2 图表轴中的千位分隔符占位符。

示例

1
10
100
1,000
10,000
1,00,000
10,00,000
1,00,00,000
10,00,00,000
Run Code Online (Sandbox Code Playgroud)

reprex 包( v2.0.0 )于 2021 年 6 月 28 日创建

locale r separator ggplot2

3
推荐指数
1
解决办法
88
查看次数