[英]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 不包含在数据框中,它是一个“标志”变量,值为“A”或“B”。 当“A”时,希望在数据框中创建一个名为“newColumn”的新列,该列是旧列(名为“oldColumn”)的三倍,否则与旧列相同。
2) 想将名为“numbers”的列与名为“seconds”的另一列中具有最小值的数字条目相除,如下所示:
df$newCol <- df$numbers / df[df$seconds== min(df$seconds),]$numbers
我怎样才能用 mutate 命令和 "%>%" 来做到这一点,让它看起来更方便? 不幸的是,我尝试过的任何方法都不起作用。
感谢您的回答,J。
如果 myvar 只是一个漂浮在环境中的变量,您可以在 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 作为参数),并拉出 numbers 变量的值
# 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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.