Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从现有变量创建新变量的R函数_R_Function - Fatal编程技术网

从现有变量创建新变量的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))
}