根据一列dplyr数据表中的条件创建新变量

时间:2019-03-02 11:57:43

标签: r dplyr data.table data-manipulation

样本数据:

Group <- c("a", "a", "a", "b", "b", "b", "c", "c", "c")    
value_1 <- c(1.10, 2.5, 1.7, 0.99, 1.50, 1.65, 2.5, 2.5, 1.5)
value_2 <- c(0.03, 1.3, 3.5, 0.02, 4.3, 1.2, 1.4, 1.4, 3.7)
new_variable_1 <- c(1,0,1, 1,1,0, 0,0,1)    
df <- data.frame(Group, value_1, value_2, new_variable_1)

输出为new_variable_1。我想根据以下条件创建一个new_variable_1我正在寻找2种解决方案。

基本思路:

  

按组查找value_2中的最大值,然后根据value_1中的值创建虚拟变量。

解决方案1逻辑:

  1. 按组查找max(value_2)。例如,value_2组在a中的最大值是3.5

  2. 按组查找相应的value_1。例如,value_11.7组中的a

  3. 如果new_variable_1小于上一步中的相应值,请按1组创建{li>

    value_1。例如,对于组avalue_1 <= 1.7应该显示1,而value_1 > 1.7应该显示0

解决方案2逻辑:

与上述相同,但将第2步中的阈值提高10%。

  1. value_2a中的最大值为3.5

  2. 然后它对应于1.7组中的值value_1 a

  3. 将值增加10%。对于组,增加的10%将是1.87

  4. 创建new_variable_1:对于组a,value_1 <= 1.87应该显示1,而value_1 > 1.87应该显示0

欢迎使用

R,dplyrdata.table和最有效的R代码。

这是一个大型数据集,因此组的长度可能不同,并且Inf中可能存在NAvalue_2

1 个答案:

答案 0 :(得分:1)

我们可以尝试。我已经使用以“ New”开头的名称来简化跟踪。

解决方案1(感谢@Gregor):

library(dplyr)


 df %>% 
  group_by(Group) %>%  
  mutate(New_variable_1 = ifelse(value_1 <= value_1[which.max(value_2)], 1, 0))

解决方案2:感谢@Gregor

df %>% 
  group_by(Group) %>%  
  mutate(New_variable_1 = ifelse(value_1 <= value_1[which.max(value_2)], 1, 0),
         NewVar1=value_1[which.max(value_2)]*1.1)