从现有变量创建新变量的R函数
我有一个数据帧,当某些值基于有限数量的观测值时,我希望在其中抑制它们 我的数据集如下所示:从现有变量创建新变量的R函数,r,function,R,Function,我有一个数据帧,当某些值基于有限数量的观测值时,我希望在其中抑制它们 我的数据集如下所示: > GROUP <- c("A", "B", "C", "D", "E", "F") > AVERAGE <- c(100, 5, 10, 10, 5, 5) > N_AVERAGE <- c(53, 5, 12, 20, 50, 2) > df_average <- data.frame(GROUP , AVERAGE, N_AVERAGE) > d
> GROUP <- c("A", "B", "C", "D", "E", "F")
> AVERAGE <- c(100, 5, 10, 10, 5, 5)
> N_AVERAGE <- c(53, 5, 12, 20, 50, 2)
> df_average <- data.frame(GROUP , AVERAGE, N_AVERAGE)
> df_average
GROUP AVERAGE N_AVERAGE
1 A 100 53
2 B 5 5
3 C 10 12
4 D 10 20
5 E 5 50
6 F 5 2
>组平均数N_平均数df_平均数df_平均数
团体平均数N_平均数
1 A 100 53
2 B 5 5
3 C 10 12
4d1020
5 E 5 50
6 F 5 2
我想创建一个新变量AVERAGE\u new,当“N\u AVERAGE”大于等于10时,它取“AVERAGE”的值。当“N_平均值”小于10时,我希望新变量为NA
这是我第一次尝试:
funct_suppress <- function(dataset #input dataset
, var_goal # variable to suppress based on other variable
, var_N # variable used to determine whether to suppress
, lower_bound) # lower_bound for var_N, when value is below lower_bound, suppress var_goal
{
dataset <- dataset %>%
mutate(paste0(var_goal,"_new") = ifelse((var_N < lower_bound),NA, var_goal))
}
df_average <- funct_suppress(df_average, AVERAGE, AVERAGE_nw,N_AVERAGE,10) # suppress all AVERAGE when N_AVERAGE < 10
funct\u suppress%
+选择(-var\u目标,-var\u N)
+ }
>df_平均值df_平均值
集团平均值N_平均值var_目标值nw
1 A 100 53 100
2 B 5 NA
3 C 10 12 10
4 D 10 20 10
5 E 5 50 5
6 F 5 2 NA
这确实有效,但我的新变量没有我想要的名称
我该怎么做?如果函数不是最有效的方法,我愿意接受其他建议。
但是,输入变量确实需要能够更改,因为我需要对多个具有不同变量名称的数据帧执行此任务
谢谢大家! 您可以复制所有值,然后删除<10后的值
df_average$AVERAGE_new <- df_average$AVERAGE
df_average$AVERAGE_new[df_average$N_AVERAGE < 10] <- NA
df_average
GROUP AVERAGE N_AVERAGE AVERAGE_new
1 A 100 53 100
2 B 5 5 NA
3 C 10 12 10
4 D 10 20 10
5 E 5 50 5
6 F 5 2 NA
df_average$average_new如果您的dplyr
版本至少为0.7,您可以通过这种方式修改您的函数:
funct_suppress <- function(dataset #input dataset
, var_goal # variable to suppress based on other variable
, var_goal_nw # suppresses value of var_goal
, var_N # variable used to determine whether to suppress
, lower_bound) # lower_bound for var_N, when value is below lower_bound, suppress var_goal
{
var_goal <- enquo(var_goal)
var_goal_nw <- enquo(var_goal_nw)
var_N = enquo(var_N)
varname <- quo_name(var_goal_nw)
dataset %>%
mutate(!!varname := ifelse((!!var_N < lower_bound),NA, !!var_goal))
}
funct\u谢谢,但我希望有一个函数或类似的东西来进行此更改。我在这里包含的示例非常简单,但实际上我需要对数据进行大量调整,并且我需要对大量数据集/变量进行调整。因此,我不希望每次都手动进行更改。如果代码的唯一问题是新列没有正确的名称,则可以在函数末尾添加类似的内容:colnames(dataset)[colnames(dataset)=“var_goal_nw”]这是最简单的方法,但不起作用。我得到的错误是var_goal_nw不存在,并且“要替换的项目数不是替换长度的倍数”。我也尝试过使用重命名(from),但它也不起作用。。
funct_suppress <- function(dataset #input dataset
, var_goal # variable to suppress based on other variable
, var_goal_nw # suppresses value of var_goal
, var_N # variable used to determine whether to suppress
, lower_bound) # lower_bound for var_N, when value is below lower_bound, suppress var_goal
{
var_goal <- enquo(var_goal)
var_goal_nw <- enquo(var_goal_nw)
var_N = enquo(var_N)
varname <- quo_name(var_goal_nw)
dataset %>%
mutate(!!varname := ifelse((!!var_N < lower_bound),NA, !!var_goal))
}