样本数据:
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
中的值创建虚拟变量。
按组查找max(value_2)
。例如,value_2
组在a
中的最大值是3.5
按组查找相应的value_1
。例如,value_1
是1.7
组中的a
new_variable_1
小于上一步中的相应值,请按1
组创建{li> value_1
。例如,对于组a
,value_1 <= 1.7
应该显示1
,而value_1 > 1.7
应该显示0
。
与上述相同,但将第2步中的阈值提高10%。
组value_2
在a
中的最大值为3.5
然后它对应于1.7
组中的值value_1
a
将值增加10%
。对于组,增加的10%
将是1.87
。
创建new_variable_1
:对于组a,value_1 <= 1.87
应该显示1
,而value_1 > 1.87
应该显示0
。
R,dplyr
,data.table
和最有效的R代码。
这是一个大型数据集,因此组的长度可能不同,并且Inf
中可能存在NA
或value_2
。
答案 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)