gpt4 book ai didi

R dplyr 方法变异变量(如果存在)

转载 作者:行者123 更新时间:2023-12-04 10:35:18 24 4
gpt4 key购买 nike

作为 dplyr 及其整洁数据概念的忠实粉丝,我想在数据帧中存在特定变量时对其进行变异。这是想法:

# Load libraries
library(dplyr)

# Create data frames
df1 <- data.frame(year = 2000:2010, foo = 0:10)
df2 <- data.frame(year = 2000:2010)

# Create function
cnd_mtt <- function(df){
df %>%
mutate_if(colname == "foo", as.factor) # <---- this is the tricky part
}

预期结果:该函数应该适用于两个数据帧并且没有错误

想法?

最佳答案

您可以将 mutate_atone_of 一起使用,如果该列不存在,则会引发警告消息:

cnd_mtt <- function(df){
df %>%
mutate_at(vars(one_of('foo')), as.factor)
}

cnd_mtt(df2)
# year
#1 2000
#2 2001
#3 2002
#4 2003
#5 2004
#6 2005
#7 2006
#8 2007
#9 2008
#10 2009
#11 2010

Warning message:
Unknown variables: `foo`


澄清一下,当 one_of 无法从 vars 变量解析列名时,会引发警告消息:
one_of('foo', vars = names(df1))
# [1] 2
one_of('foo', vars = names(df2))
# integer(0)

Warning message:
Unknown variables: `foo`


如果您想进一步摆脱警告消息,请引用@Gregor 的评论,您可以将 mutate_atif/else 一起使用,如果列中不存在 integer(0) ,则返回 foo :
df2 %>% 
mutate_at(if('foo' %in% names(.)) 'foo' else integer(0), as.factor)

# year
#1 2000
#2 2001
#3 2002
#4 2003
#5 2004
#6 2005
#7 2006
#8 2007
#9 2008
#10 2009
#11 2010

关于R dplyr 方法变异变量(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48345728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com