簡體   English   中英

如何在 R 中的數據幀內執行條件操作?

[英]How to perform operations with condition within data frames in R?

我有一個由包含因子的向量組成的數據框。 我想添加另一個向量,其中包含以某些因素為條件的計算結果:

W X Z
2 P1 15 如果 X = P1; Z = Y - W(結果 Z = 13)
2 P2 15 如果 X = P2; Z = Y + W(結果 Z = 17)

我所做的嘗試都沒有成功。 有小費嗎?

w <- seq(2, 20, 2)
x <- c("P1", "P2")
y <- c(15, 30, 45, 60)
data <- expand.grid(W=w, X=x, Y=y)

z_values <- function(X){
if (X == "P1") {
  Y - W
} else {
  Y + W
}}

data$Z <- z_values(X)

你可以試試下面的代碼

transform(
  data,
  Z = Y + W * (1 - 2 * (X == "P1"))
)

或者

transform(
  data,
  Z = Y + W * ifelse(X == "P1", -1, 1)
)

這使

    W  X  Y  Z
1   2 P1 15 13
2   4 P1 15 11
3   6 P1 15  9
4   8 P1 15  7
5  10 P1 15  5
6  12 P1 15  3
7  14 P1 15  1
8  16 P1 15 -1
9  18 P1 15 -3
10 20 P1 15 -5
11  2 P2 15 17
12  4 P2 15 19
13  6 P2 15 21
14  8 P2 15 23
15 10 P2 15 25
16 12 P2 15 27
17 14 P2 15 29
18 16 P2 15 31
19 18 P2 15 33
20 20 P2 15 35
21  2 P1 30 28
22  4 P1 30 26
23  6 P1 30 24
24  8 P1 30 22
25 10 P1 30 20
26 12 P1 30 18
27 14 P1 30 16
28 16 P1 30 14
29 18 P1 30 12
30 20 P1 30 10
31  2 P2 30 32
32  4 P2 30 34
33  6 P2 30 36
34  8 P2 30 38
35 10 P2 30 40
36 12 P2 30 42
37 14 P2 30 44
38 16 P2 30 46
39 18 P2 30 48
40 20 P2 30 50
41  2 P1 45 43
42  4 P1 45 41
43  6 P1 45 39
44  8 P1 45 37
45 10 P1 45 35
46 12 P1 45 33
47 14 P1 45 31
48 16 P1 45 29
49 18 P1 45 27
50 20 P1 45 25
51  2 P2 45 47
52  4 P2 45 49
53  6 P2 45 51
54  8 P2 45 53
55 10 P2 45 55
56 12 P2 45 57
57 14 P2 45 59
58 16 P2 45 61
59 18 P2 45 63
60 20 P2 45 65
61  2 P1 60 58
62  4 P1 60 56
63  6 P1 60 54
64  8 P1 60 52
65 10 P1 60 50
66 12 P1 60 48
67 14 P1 60 46
68 16 P1 60 44
69 18 P1 60 42
70 20 P1 60 40
71  2 P2 60 62
72  4 P2 60 64
73  6 P2 60 66
74  8 P2 60 68
75 10 P2 60 70
76 12 P2 60 72
77 14 P2 60 74
78 16 P2 60 76
79 18 P2 60 78
80 20 P2 60 80

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM