R管道符(%>%)在以下情况下的使用方法
How to use the R pipe operator (%>%) in the following cases
1) 我有一个名为 df 的数据框,如何在管道运算符中使用的 mutate 函数中包含一个 if 语句?以下不起作用:
df %>%
mutate_if(myvar == "A", newColumn = oldColumn*3, newColumn = oldColumn)
变量 myvar 不包含在数据框中,它是一个 "flag" 变量,其值为 "A" 或 "B"。当 "A" 时,想在数据框中创建一个名为 "newColumn" 的新列,该列是旧列(名为 "oldColumn")的三倍,否则与旧列相同。
2) 想将名为"numbers"的列与另一个名为"seconds"的列中具有最小值的数字条目分开,如下:
df$newCol <- df$numbers / df[df$seconds== min(df$seconds),]$numbers
如何使用 mutate 命令和“%>%”来做到这一点,使其看起来更方便?不幸的是,我尝试过的任何东西都不起作用。
感谢您的回答,
J.
如果 myvar 只是一个在 environmnet 中浮动的变量,您可以在 mutate 中使用 if else 语句(类似问题 )
library(dplyr)
# Generate dataset
df <- tibble(oldColumn = rnorm(100))
# Mutate with if-else conditions
df <- df %>% mutate(newColumn = if(myvar == "A") oldColumn else if(myvar=="B") oldColumn * 3)
如果 myvar 作为列包含在数据框中,那么您可以使用 case_when.
# Generate dataset
df <- tibble(myvar = sample(c("A", "B"), 100, replace = TRUE),
oldColumn = rnorm(100))
# Create a new column which depends on the value of myvar
df <- df %>%
mutate(newColumn = case_when(myvar == "A" ~ oldColumn*3,
myvar == "B" ~ oldColumn))
关于问题 2,您可以将 mutate 与“.”结合使用。在函数的右侧调用左侧(即 "df")的运算符。然后你可以过滤到具有最小秒值的行(top_n 语句使用 -1 作为参数),并提取数字变量的值
# Generate data
df <- tibble(numbers = sample(1:60),
seconds = sample(1:60))
# Do computation
df <- df %>% mutate(newCol = numbers / top_n(.,-1,seconds) %>% pull(numbers))
1) 我有一个名为 df 的数据框,如何在管道运算符中使用的 mutate 函数中包含一个 if 语句?以下不起作用:
df %>%
mutate_if(myvar == "A", newColumn = oldColumn*3, newColumn = oldColumn)
变量 myvar 不包含在数据框中,它是一个 "flag" 变量,其值为 "A" 或 "B"。当 "A" 时,想在数据框中创建一个名为 "newColumn" 的新列,该列是旧列(名为 "oldColumn")的三倍,否则与旧列相同。
2) 想将名为"numbers"的列与另一个名为"seconds"的列中具有最小值的数字条目分开,如下:
df$newCol <- df$numbers / df[df$seconds== min(df$seconds),]$numbers
如何使用 mutate 命令和“%>%”来做到这一点,使其看起来更方便?不幸的是,我尝试过的任何东西都不起作用。
感谢您的回答, J.
如果 myvar 只是一个在 environmnet 中浮动的变量,您可以在 mutate 中使用 if else 语句(类似问题
library(dplyr)
# Generate dataset
df <- tibble(oldColumn = rnorm(100))
# Mutate with if-else conditions
df <- df %>% mutate(newColumn = if(myvar == "A") oldColumn else if(myvar=="B") oldColumn * 3)
如果 myvar 作为列包含在数据框中,那么您可以使用 case_when.
# Generate dataset
df <- tibble(myvar = sample(c("A", "B"), 100, replace = TRUE),
oldColumn = rnorm(100))
# Create a new column which depends on the value of myvar
df <- df %>%
mutate(newColumn = case_when(myvar == "A" ~ oldColumn*3,
myvar == "B" ~ oldColumn))
关于问题 2,您可以将 mutate 与“.”结合使用。在函数的右侧调用左侧(即 "df")的运算符。然后你可以过滤到具有最小秒值的行(top_n 语句使用 -1 作为参数),并提取数字变量的值
# Generate data
df <- tibble(numbers = sample(1:60),
seconds = sample(1:60))
# Do computation
df <- df %>% mutate(newCol = numbers / top_n(.,-1,seconds) %>% pull(numbers))