创建一个函数,通过算术运算跨另一个变量的各个级别比较变量的值

时间:2018-12-08 17:06:44

标签: r function data.table tidyverse arithmetic-expressions

我需要帮助来创建执行以下操作的函数:

  • 创建一个名为division的新变量
  • 将变量r_n的每一行dT$division的值除以r_n的相应行dT$result1的值除以 dT$result1dt$treat == A每行的值
  • 创建一个名为operation的新变量
  • 对于变量operation的每一行执行 dT$operation = (2*(dT$division-1))/(2*(dT$division-1)+1)

其中n中的r_n是数据帧中每一行的数目,并取自1 to N的值,N是数据帧中观测值或行的总数。

#sample数据

(注意:已编辑以添加变量id,这对于创建所需的功能至关重要)

dT = read.table(header = TRUE, text = "
id group treat result1
1 0 A 0.1438 
2 0 A 0.237 
3 0 B 0.2774 
4 0 B 0.2774 
5 0 B 0.2093 
6 0 C 0.1206 
7 0 C 0.1707 
8 0 C 0.0699 
9 0 C 0.1351 
10 1 C 0.1206 
11 1 A 0.1438 
12 1 A 0.237 
13 1 B 0.2774 
14 1 B 0.2774 
15 1 B 0.2093 
16 1 C 0.1206 
17 1 C 0.1707 
18 1 C 0.0699
19 1 C 0.1351 
20 1 C 0.1206")

#head输出

(注意:这是从原始数据中随机抽取的行样本,以方便说明概念)

id group treat result1
1 0 A 0.014
2 0 A 0.02
3 0 B 0.20
4 1 A 0.14
5 1 B 0.27

#期望的输出

(注意:对于dT $ treat.denominator A2和A3,此示例仅显示视觉效果-因为我需要尽快发布期望的输出;这意味着我计算了变量dT $ division的实际值和dT $操作仅适用于dT $ treat。分母A1)

id group treat result1 treat.numerator treat.denominator division operation
1 0 A 0.01 A1 A1 1.00 0.00
2 0 A 0.02 A2 A1 1.64 0.56
3 0 B 0.20 B3 A1 20.00 0.97
4 1 A 0.14 A4 A1 14.00 0.96
5 1 B 0.27 B5 A1 27.00 0.98
1 0 A 0.01 A1 A2 1.00 0.00
2 0 A 0.02 A2 A2 1.64 0.56
3 0 B 0.20 B3 A2 20.00 0.97
4 1 A 0.14 A4 A2 14.00 0.96
5 1 B 0.27 B5 A2 27.00 0.98
1 0 A 0.01 A1 A3 1.00 0.00
2 0 A 0.02 A2 A3 1.64 0.56
3 0 B 0.20 B3 A3 20.00 0.97
4 1 A 0.14 A4 A3 14.00 0.96
5 1 B 0.27 B5 A3 27.00 0.98

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  1. 创建一个名为除法的新变量
  2. 在变量dT $ div的每一行r_n中除以dT $ treat == A的dT $ result1的对应行r_n的值除以dT $ result1的每一行的值的结果

回答步骤1和2

  division<-dT$result1/dT$result1[dT$treat=="A"]  

  dT<-cbind(dT,division)
  1. 创建一个名为operation的新变量

  2. 对变量操作的每一行执行dT $ operation =(2 *(dT $ division-1)//(2 *(dT $ division-1)+1)

回答3和4

dT$operation<-(2*(dT$division-1))/(2*(dT$division-1)+1)