我有两个数据框如下:
test1 <- structure(list(`0.62m` = c(0.011, 0.043, 0.057, 0.067, 0.095,
0.121, 0.098, 0.086, 0.103, 0.12, 0.104), `0.87m` = c(0.017,
0.018, 0.052, 0.062, 0.111, 0.101, 0.112, 0.096, 0.104, 0.108,
0.111), `1.12m` = c(0.009, 0.016, 0.048, 0.03, 0.085, 0.07, 0.108,
0.076, 0.078, 0.092, 0.107), `1.37m` = c(0.025, 0.035, 0.035,
0.048, 0.067, 0.074, 0.095, 0.08, 0.082, 0.091, 0.094)), .Names = c("0.62m",
"0.87m", "1.12m", "1.37m"), row.names = 25:35, class = c("tbl_df",
"tbl", "data.frame"))
#Test 2
test2 <- structure(list(`0.62m` = c(235.15, 230.95, 251.95, 261.25, 254.55,
251.75, 259.85, 257.65, 252.55, 255.55, 254.15), `0.87m` = c(287.95,
196.35, 275.05, 245.85, 253.35, 259.75, 254.95, 261.75, 253.05,
264.45, 264.25), `1.12m` = c(36.35, 242.95, 266.65, 266.45, 248.85,
256.95, 253.75, 268.25, 251.05, 268.85, 259.65), `1.37m` = c(20.65,
287.95, 260.25, 260.55, 255.25, 258.45, 248.45, 261.95, 253.45,
263.25, 252.05)), .Names = c("0.62m", "0.87m", "1.12m", "1.37m"
), row.names = 25:35, class = c("tbl_df", "tbl", "data.frame"
))
Run Code Online (Sandbox Code Playgroud)
测试1如下所示:
0.62m 0.87m 1.12m 1.37m
25 0.011 0.017 0.009 0.025
26 0.043 0.018 0.016 0.035
27 0.057 0.052 0.048 0.035
28 0.067 0.062 0.030 0.048
29 0.095 0.111 0.085 0.067
30 0.121 0.101 0.070 0.074
31 0.098 0.112 0.108 0.095
32 0.086 0.096 0.076 0.080
33 0.103 0.104 0.078 0.082
34 0.120 0.108 0.092 0.091
35 0.104 0.111 0.107 0.094
Run Code Online (Sandbox Code Playgroud)
测试2如下所示:
0.62m 0.87m 1.12m 1.37m
25 235.15 287.95 36.35 20.65
26 230.95 196.35 242.95 287.95
27 251.95 275.05 266.65 260.25
28 261.25 245.85 266.45 260.55
29 254.55 253.35 248.85 255.25
30 251.75 259.75 256.95 258.45
31 259.85 254.95 253.75 248.45
32 257.65 261.75 268.25 261.95
33 252.55 253.05 251.05 253.45
34 255.55 264.45 268.85 263.25
35 254.15 264.25 259.65 252.05
Run Code Online (Sandbox Code Playgroud)
现在,我想创建一个新的数据帧test3,我需要检查test2中的值是否大于180.如果该值大于180,则元素应与test1相同,否则应为-1*test1.
所需的输出如下所示:
0.62m 0.87m 1.12m 1.37m
25 0.011 0.017 -0.009 -0.025
26 0.043 0.018 0.016 0.035
Run Code Online (Sandbox Code Playgroud)
我试过以下:
test3 <- ifelse(test2 > 180, test1, -1 * test1)
Run Code Online (Sandbox Code Playgroud)
另一种方法:
test3 <- data.frame(sapply(X = test1, FUN = function(x) (ifelse(test2>180, x, - 1*x))))
Run Code Online (Sandbox Code Playgroud)
我想我需要使用apply但不确定如何正确使用它.
您只需要一些as.matrix()调用(请注意,只有顶行中最右边的两个单元格实际上小于 180):
ifelse(as.matrix(test2)>180,as.matrix(test1),-as.matrix(test1));
## 0.62m 0.87m 1.12m 1.37m
## 25 0.011 0.017 -0.009 -0.025
## 26 0.043 0.018 0.016 0.035
## 27 0.057 0.052 0.048 0.035
## 28 0.067 0.062 0.030 0.048
## 29 0.095 0.111 0.085 0.067
## 30 0.121 0.101 0.070 0.074
## 31 0.098 0.112 0.108 0.095
## 32 0.086 0.096 0.076 0.080
## 33 0.103 0.104 0.078 0.082
## 34 0.120 0.108 0.092 0.091
## 35 0.104 0.111 0.107 0.094
Run Code Online (Sandbox Code Playgroud)
返回值将是一个矩阵,但您可以通过返回到 data.frame (如果您愿意)as.data.frame()。
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |