标签: mutate

我可以结合使用 dplyr mutate_at 和 mutate_if 语句吗?

我有以下示例输出:

   country country-year year     a     b
1  France  France2000   2000       NA    NA 
2  France  France2001   2001     1000  1000  
3  France  France2002   2002       NA    NA
4  France  France2003   2003     1600  2200
5  France  France2004   2004       NA    NA
6  UK          UK2000   2000     1000  1000  
7  UK          UK2001   2001       NA    NA
8  UK          UK2002   2002     1000  1000  
9  UK          UK2003   2003       NA    NA
10 UK          UK2004   2004       NA    NA
11 Germany     UK2000   2000       NA    NA 
12 Germany     UK2001   2001       NA    NA
13 Germany …
Run Code Online (Sandbox Code Playgroud)

interpolation r dplyr mutate

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

为什么使用单元素列表改变列表列会导致深层复制?

我不知道创建一个dplyr::mutate()带有单元素列表的新列表列实际上是深度复制元素以填充tibble长度(请参阅参考资料t3).这是为什么?

如果我t4在创建tibble(t5)时指定了explicit()的正确长度或传递它,则元素将通过引用传递.

考虑以下情况,其中列表包含具有大向量的tibble.

library(tidyverse)
library(pryr)

t1 <- tibble(a = 1:4)
t2 <- tibble(b = 1:1e6)
t3 <- mutate(t1, tl = list(t2))
t4 <- mutate(t1, tl = rep(list(t2), n()))
t5 <- tibble(a = 1:4, tl = list(t2))

object_size(t2)
#> 4 MB
object_size(t3)
#> 16 MB
object_size(t4)
#> 4 MB
object_size(t5)
#> 4 MB
Run Code Online (Sandbox Code Playgroud)

reprex包创建于2019-02-22 (v0.2.1)

r deep-copy mutate tibble

7
推荐指数
0
解决办法
85
查看次数

计算基准年和相对百分比变化的指数

我正在寻找一种方法,在 id 和组中,使用 100 的滞后(或领先) value和新索引号idx_value来计算下一个索引号。

# install.packages(c("tidyverse"), dependencies = TRUE)
library(tibble)
library(magrittr)
Run Code Online (Sandbox Code Playgroud)

就像,我有这个数据框:

start_tbl <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 2L, 2L), grp = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
1L, 1L, 2L, 2L, 2L), year = c(7L, 8L, 9L, 10L, 7L, 8L, 9L, 10L, 
7L, 8L, 9L, 7L, 8L, 9L), value = c(2, -7, -2.3, 1.1, -1, -12, 
-4, 2, 1, -3, 2, …
Run Code Online (Sandbox Code Playgroud)

r percentage dplyr mutate tibble

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

在R中的函数中创建和使用新变量:tidyverse中的NSE编程错误

在阅读并重新阅读了许多"使用dplyr编程"指南之后,我仍然无法找到解决我的特定情况的方法.

据我所知,使用group_by_,mutate_和tidyverse功能,例如"字符串型"版本向弃用的标题,这enquo是要走的路.

然而,我的情况有所不同,我正在努力寻找一种整洁的方式来解决它的整洁方式.

实际上,我的目标是在函数内创建和操作数据帧.基于其他人创建(变异)新变量,使用它们等.

但是,无论我怎么努力,我的代码都会出错或者在包检查时返回一些警告,例如no visible binding for global variable ....

这是一个可重复的例子:

这就是我想要做的事情:

df <- data.frame(X=c("A", "B", "C", "D", "E"),
                 Y=c(1, 2, 3, 1, 1))
new_df <- df %>%
  group_by(Y) %>%
  summarise(N=n()) %>%
  mutate(Y=factor(Y, levels=1:5)) %>%
  complete(Y, fill=list(N = 0)) %>%
  arrange(Y) %>%
  rename(newY=Y) %>%
  mutate(Y=as.integer(newY))
Run Code Online (Sandbox Code Playgroud)

一些常见的dplyr操作预期结果应该是:

# A tibble: 5 x 3
     newY     N     Y
<fctr> <dbl> <int>
1      1     3     1
2      2     1     2
3      3     1 …
Run Code Online (Sandbox Code Playgroud)

r dplyr nse tidyverse mutate

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

如何在 Tensorflow.js 中改变张量的值?

如何在 Tensorflow.js 中改变张量的值?例如,如果我有一个这样创建的张量: const a = tf.tensor1d([1,2,3,4])

如何更改张量的第三个元素的值?我知道张量是不可变的,而变量是可变的。

这样做:const a = tf.variable(tf.tensor1d([1,2,3,4]))似乎并没有解决问题。我不能做:

const a = a[0].assign(5)

我可以像这样在python tensorflow 中做到这一点:

a = tf.Variable([1,2,3,4]) a = a[0].assign(100) with tf.Session() as sess: sess.run(tf.global_variables_iniliazer()) print sess.run(a)

这输出 [100, 2,3,4]

tensorflow mutate tensor tensorflow.js

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

使用 dplyr 到 group_by 并仅使用 if(没有 else)语句有条件地变异

我有一个数据框,我需要按列条目的组合对其进行分组,以便仅使用 if 语句(没有 else 条件)有条件地改变几列。

更具体地说,如果某个组的列值超过预定义的阈值,我想对它们求和,否则这些值应保持不变。

我曾尝试使用这两种方法来执行此操作if_elsecase_when但这些函数需要“假”参数 ( if_else) 或默认设置与 NA ( case_when)不匹配的值:

iris_mutated <- iris %>%
  dplyr::group_by(Species) %>%
  dplyr::mutate(Sepal.Length=if_else(sum(Sepal.Length)>250, sum(Sepal.Length)),
                Sepal.Width=if_else(sum(Sepal.Width)>170, sum(Sepal.Width)),
                Petal.Length=if_else(sum(Petal.Length)>70, sum(Petal.Length)),
                Petal.Width=if_else(sum(Petal.Width)>15, sum(Petal.Width)))

iris_mutated <- iris %>%
  dplyr::group_by(Species) %>%
  dplyr::mutate(Sepal.Length=case_when(sum(Sepal.Length)>250 ~ sum(Sepal.Length)),
                Sepal.Width=case_when(sum(Sepal.Width)>170 ~ sum(Sepal.Width)),
                Petal.Length=case_when(sum(Petal.Length)>70 ~ sum(Petal.Length)),
                Petal.Width=case_when(sum(Petal.Width)>15 ~ sum(Petal.Width)))
Run Code Online (Sandbox Code Playgroud)

任何想法如何做到这一点?

编辑:

这是预期输出的示例。所有物种分组条目的花瓣宽度总和为setosa为 12.3 ,virginica为101.3 ,versicolor为66.3 。如果我要求这个总和应该至少为 15 来求和的值(否则应该保留原始值),那么我期望以下输出(仅显示列“Petal.Width”和“Species”):

Petal.Width    Species
1           0.2     setosa
2           0.2     setosa
3           0.2     setosa
4           0.2     setosa …
Run Code Online (Sandbox Code Playgroud)

r dplyr mutate

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

使用 mutate_all 创建新列

我有一些看起来像这样的数据:

  Year Revenue Cost Rent
1 2016    3000    4  100
2 2017    4000    5  100
3 2018    5000    6  100

df <- data.frame(stringsAsFactors=FALSE,
        Year = c(2016L, 2017L, 2018L),
     Revenue = c(3000L, 4000L, 5000L),
        Cost = c(4L, 5L, 6L),
        Rent = c(100L, 100L, 100L)
)
Run Code Online (Sandbox Code Playgroud)

我想将所有内容分成以下百分比Rent

library(dplyr)
df <- df %>% mutate_at(vars(Revenue:Rent), funs(. /Rent))
Run Code Online (Sandbox Code Playgroud)

这完美地工作。

  Year Revenue Cost Rent
1 2016      30 0.04    1
2 2017      40 0.05    1
3 2018      50 0.06    1
Run Code Online (Sandbox Code Playgroud)

唯一的事情:我丢失了我原来的专栏。

我该如何做mutate_all, 以便我有新的列,比如说叫做 …

r dplyr mutate

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

汇总时间序列的多个组中的数据

我在不同的位置和时间对鸟类进行了一系列观察。数据框如下所示:

birdID   site          ts
1       A          2013-04-15 09:29
1       A          2013-04-19 01:22
1       A          2013-04-20 23:13
1       A          2013-04-22 00:03
1       B          2013-04-22 14:02
1       B          2013-04-22 17:02
1       C          2013-04-22 14:04
1       C          2013-04-22 15:18
1       C          2013-04-23 00:54
1       A          2013-04-23 01:20
1       A          2013-04-24 23:07
1       A          2013-04-30 23:47
1       B          2013-04-30 03:51
1       B          2013-04-30 04:26
2       C          2013-04-30 04:29
2       C          2013-04-30 18:49
2       A          2013-05-01 01:03
2       A          2013-05-01 23:15
2       A          2013-05-02 00:09 …
Run Code Online (Sandbox Code Playgroud)

r posixct dplyr tidyverse mutate

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

使用 tidyverse 或 dplyr 的简单 mutate 抛出的错误

我在使用无法调试的 tidyverse 包时遇到了严重的问题。例如,即使在我已经制作的过去项目中,“mutate”也无法正常工作。当我安装以下软件包时,这一切都开始了:

library(pdftools)
library(tm)
library(stringi)
library(tidyverse)
Run Code Online (Sandbox Code Playgroud)

(或library(dplyr) library(tidyr)) library(purrr)

当我执行rm(list=ls()).

我唯一没有尝试过的是卸载 R/RStudio 并重新安装它。我使用 RStudio 版本 1.0.153 和 R 版本 3.4.1。我实际上试图在其他计算机上重现该错误,但这显然不起作用。

这是一个临时示例:

library(tidyverse)
emp.data <- data.frame(emp_id=c(1:5),emp_name=c("Rick","Dan","Michelle","Ryan","Gary"),
                       salary=c(623.3,515.2,611.0,729.0,843.25), 
                       start_date=as.Date(c("2012-01-01", "2013-09-23", "2014-11-15", "2014-05-11",
                         "2015-03-27"),
  stringsAsFactors = FALSE)
)
emp.data_new <- emp.data %>%
  mutate(RaisedSalary = salary*1.4)
Run Code Online (Sandbox Code Playgroud)

emp.data 在我的会话中定义正常。我希望在新数据框 emp.data.new ("RaisedSalary") 中添加一个新列,而不是这个,我得到:

mutate_impl(.data, dots) 中的错误:无法将对象转换为函数:[type=NULL; 目标=CLOSXP、SPECIALSXP 或 BUILTINSXP]。

如果我加载 tidyr/dplyr 而不是 tidyverse,我也会收到此错误消息。我在论坛上潜伏了 48 多个小时,但没有发现任何与此错误类似的东西。有没有人遇到过这样的错误?

sessionInfo() 的结果:

R version 3.4.1 (2017-06-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build …
Run Code Online (Sandbox Code Playgroud)

error-handling r rstudio tidyverse mutate

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

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

我有一些随时间收集的变量。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
查看次数