标签: mutate

行方式操作,选择助手和dplyr中的mutate函数

我将使用以下数据集来说明我的问题:

my_df <- data.frame(
    a = 1:10,
    b = 10:1
)
colnames(my_df) <- c("a", "b")
Run Code Online (Sandbox Code Playgroud)

第1部分

我使用该mutate()函数在我的数据集中创建两个新变量,我想计算同一mutate()调用中两个新列的行方式.但是,我真的希望能够使用select()帮助器,如starts_with(),ends_with()contains().

我的第一次尝试:

 my_df %>%
    mutate(
        a_2 = a^2,
        b_2 = b^2,
        mean = rowMeans(select(ends_with("2")))
    )
Error in mutate_impl(.data, dots) : 
  Evaluation error: No tidyselect variables were registered.
Run Code Online (Sandbox Code Playgroud)

我理解为什么会出现错误 - select()函数没有给出任何.data参数.所以我改变了代码......

...我.select()函数内添加" "的第二次尝试:

my_df %>%
    mutate(
        a_2 = a^2,
        b_2 = b^2,
        mean = rowMeans(select(., ends_with("2"))) …
Run Code Online (Sandbox Code Playgroud)

select r dplyr mutate rowwise

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

R how to create columns/features based on existing data

I have a dataframe df:

userID Score  Task_Alpha Task_Beta Task_Charlie Task_Delta 
3108  -8.00   Easy       Easy      Easy         Easy    
3207   3.00   Hard       Easy      Match        Match
3350   5.78   Hard       Easy      Hard         Hard
3961   10.00  Easy       NA        Hard         Hard
4021   10.00  Easy       Easy      NA           Hard


1. userID is factor variable
2. Score is numeric
3. All the 'Task_' features are factor variables with possible values 'Hard', 'Easy', 'Match' or NA
Run Code Online (Sandbox Code Playgroud)

I want to create new columns per userID that contain the counts of …

r count strsplit mutate

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

dplyr:连续变异内的总和

library(dplyr)
tib <- tibble(a = c(1,2,3))
Run Code Online (Sandbox Code Playgroud)

以下工作如预期:

tib %>% mutate(b = a^2, c = sqrt(b))
# A tibble: 3 x 3
      a     b     c
  <dbl> <dbl> <dbl>
1     1     1     1
2     2     4     2
3     3     9     3

tib %>% mutate(b = a^2, c = sum(a))
# A tibble: 3 x 3
      a     b     c
  <dbl> <dbl> <dbl>
1     1     1     6
2     2     4     6
3     3     9     6

tib %>% mutate(b = a^2) %>% mutate(c = sum(b)) …
Run Code Online (Sandbox Code Playgroud)

r sum dplyr mutate

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

mutate_at 在某些情况下不会创建变量后缀?

我一直在dplyr::mutate_at尝试通过对某些列应用相同的函数来创建新变量。当我在参数中命名我的函数.funs,mutate 调用会创建带有后缀的新列,而不是替换现有列,这是我在此线程中发现的一个很酷的选项。

df = data.frame(var1=1:2, var2=4:5, other=9)
df %>% mutate_at(vars(contains("var")), .funs=funs('sqrt'=sqrt))
####   var1 var2 other var1_sqrt var2_sqrt
#### 1    1    4     9  1.000000  2.000000
#### 2    2    5     9  1.414214  2.236068
Run Code Online (Sandbox Code Playgroud)

但是,我注意到当vars用于指向我的列的参数只返回一列而不是几列时,生成的新列会删除初始名称:它被命名sqrt而不是在other_sqrt这里:

df %>% mutate_at(vars(contains("other")), .funs=funs('sqrt'=sqrt))
####   var1 var2 other sqrt
#### 1    1    4     9    3
#### 2    2    5     9    3
Run Code Online (Sandbox Code Playgroud)

我想了解为什么会发生这种行为,以及如何避免它,因为我事先不知道contains()将返回多少列。

编辑:新创建的列必须继承原始列的原始名称,加上末尾的后缀“sqrt”。

谢谢

r contains dplyr mutate

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

计算给定条件的百分比

我是这个网站的新手,也是编码的新手。我想知道你们中是否有人可以帮助我

我需要通过评分分布计算前 5 部电影,计算每部电影 4 星或更高评分的百分比。

到目前为止,我只能使用 dplyr 计算出现次数。

是否可以使用 dplyr (类似于我的编码)来计算它?

我不确定我是否需要变异来提出解决方案,或者是否有另一种方法可以这样做。

到目前为止我的代码:

dfAux1 <- na.omit(dfAux)
dfAux1 %>%
  group_by(movie) %>%
  summarise(tot = n()) %>%
  arrange(desc(tot))%>%
  head(5)
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的:

**Expected result**:
0.7000000, 'The Shawshank Redemption'
0.5333333, 'Star Wars IV - A New Hope'
0.5000000, 'Gladiator'
0.4444444, 'Blade Runner'
0.4375000, 'The Silence of the Lambs'
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的结果:

# A tibble: 5 x 2
                              movie   tot
                             <fctr> <int>
1                         Toy Story    17
2          The Silence of the Lambs    16
3         Star Wars IV - …
Run Code Online (Sandbox Code Playgroud)

conditional r percentage dplyr mutate

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

在 dplyr 中,是否可以使用 mutate 指定在何处添加新列?

目前我必须使用add_column将新列直接插入到所需位置,或者使用mutate, 然后select使用新的所需列顺序。

mips.group <- str_extract(mips.manifest$PlateName, "[:alnum:]+_([[:alnum:]&&[^P]]+(_CL)?)?|(KORgex)")

mips.manifest %<>%
  add_column(MIPSGroup=mips.group, .after="PlateName")
Run Code Online (Sandbox Code Playgroud)

是否可以直接告诉mutate在哪里添加新列,如果没有,是否有原因?

r dataframe dplyr mutate

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

dplyr如果没有其他则没有

我有一个数据集,我尝试使用if else语句基于不同的变量来更改某些变量的值。但是,我只想在满足特定条件时更改变量-否则我希望变量保持不变。如何在dplyr中执行此操作?

例如,如果我有4个站点(a,b,c和d),分别与10、20、30和40的值相关联,而我只想将站点a的10的值更改为12 。

df2 <- df %>%
  mutate(lat = ifelse(site == "a", 12, WHAT GOES HERE?))
Run Code Online (Sandbox Code Playgroud)

r dplyr mutate

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

mutate_at中的复合函数

我有一个小标题:

df = tibble(one = list('a', 'b'), two = list(c('p1', 'p2', 'p3'), NA_character_), three = list(NA_character_, c('z1', 'z2', 'z3')))

df
# A tibble: 2 x 3
  one   two       three    
  <chr> <list>    <list>   
1 a     <chr [3]> <chr [1]>
2 b     <chr [1]> <chr [3]>
Run Code Online (Sandbox Code Playgroud)

我想替换丢失的值的列twothree与列的值one使用coalesce(),然后在折叠每个字符向量(横行)twothree成使用单个串toString()。我的预期输出如下所示:

df = tibble(one = c('a', 'b'), two = list('p1, p2, p3', 'b'), three = list('a', 'z1, z2, z3'))
df
# A …
Run Code Online (Sandbox Code Playgroud)

r data-manipulation dplyr purrr mutate

5
推荐指数
0
解决办法
125
查看次数

在数据帧上执行滞后操作以计算 R 中的新值

我有以下代码,我正在计算数据点的百分比增长,然后我计算百分比增长的变化,我正在寻找的是能够添加一列,在其中计算百分比的读数数量增长变化为负

df <- data.frame(id = c(1,2,3,4,5,6,7,8,9,10,11,12), data = c(19, 19, 27, 27, 38, 42, 47, 48, 49, 50, 51, 53))
df <- mutate(df, pct_growth = (data - lag(data))/lag(data))
df <- mutate(df, pct_growth_change = pct_growth - lag(pct_growth))
df$pct_growth_streak <- 0
df <- dplyr::mutate(df, pct_growth_streak = ifelse(pct_growth_change <=0, lag(pct_growth_streak)+1,0) )
Run Code Online (Sandbox Code Playgroud)

我得到的输出如下

   id data pct_growth pct_growth_change pct_growth_streak
1   1   19         NA                NA                NA
2   2   19 0.00000000                NA                NA
3   3   27 0.42105263      0.4210526316                 0
4   4   27 0.00000000     -0.4210526316                 1
5   5 …
Run Code Online (Sandbox Code Playgroud)

r lag dataframe mutate

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

将列值与 dplyr::mutate 中的所有前导值进行比较

我有一个由单个向量/列组成的数据:

my_tibble <- tibble(score = c(1,2,3,4,9,8,7,6,5,4))
Run Code Online (Sandbox Code Playgroud)

对于 my_tibble$score 的每一行,我想计算与同一列中最大的“领先”元素的差异。这个新列应称为“差异”。例如,差异的第一行应为 1 - 9,而第五行应为 9 - 8,最后一行将变为 NA,因为没有值落后/低于 4。

最后,新的 tibble 应如下所示:

score | difference
<dbl>   <dbl>
1         -8
2         -7
3         -6
4         -5
9          1
8          1
7          1
6          1
5          1
4         NA
Run Code Online (Sandbox Code Playgroud)

我想使用 dplyr 来实现这一点,到目前为止已经尝试了许多 mutate 变体,例如

my_tibble %>%
 mutate(difference = score[which(score > score)])
Run Code Online (Sandbox Code Playgroud)

希望找到某种方式,使 which 函数中的第二个“分数”指代正在发生变异的当前行。然而,经过数小时的尝试和拼命在网上寻找解决方案后,我没有成功。

我发现的最接近的是dplyr: Summing nleading values,但是这仍然给我留下了一个问题,即我想要与所有主值的最大主值的差异,而不仅仅是最接近的 n 个主值。

非常感谢之前已回答或解决此问题的任何地方的帮助和/或转介!

r dplyr mutate

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