【发布时间】:2019-01-29 14:06:51
【问题描述】:
尝试对数据帧进行子集化,并一次完成一些基本计算,以避免一遍又一遍地复制函数。子集部分正在选择特定的列。并且基本的计算是各个列之间的简单比较。
这是一些数据:
structure(list(name = structure(1:12, .Label = c("a",
"b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"), class = "factor"), data_2018 = c(4, 4, 4,
4, 3, 4, 2, 4, 3, 4, 4, 3),
data_2017 = c(1, 4, 4, 3, 2, 3, 3,
4, 2, 1, 1, 2),
pilot = c(2.68421052631579, 2.73684210526316,
3.52631578947368, 3.42105263157895, 3.05263157894737, 2.78947368421053,
2.21052631578947, 3.68421052631579, 2.36842105263158, 3.73684210526316,
2.47368421052632, 2.05263157894737),
all = c(2.77777777777778,
2.85185185185185, 3.62962962962963, 3.51851851851852, 3.18518518518519,
2.92592592592593, 2.2962962962963, 3.74074074074074, 2.40740740740741,
3.77777777777778, 2.55555555555556, 2.07407407407407),
general = c(2.79166666666667,
2.79166666666667, 3.58333333333333, 3.45833333333333, 3.08333333333333,
2.83333333333333, 2.41666666666667, 3.70833333333333, 2.54166666666667,
3.79166666666667, 2.54166666666667, 2.16666666666667),
tool = c("DoS",
"DoS", "DoS", "DoS", "DoS", "DoS", "DoS", "DoS", "DoS", "DoS",
"DoS", "DoS"), status = c(6, 8, 8, 6, 6, 6, 2, 8, 6, 6, 6, 6)), row.names = c(NA,
12L), class = "data.frame")
这是我尝试过的:
diffs <- select(agged
, agged$data_2018
, ifelse(agged$data_2018 >= agged$data_2017, 1, -1)
, ifelse(agged$data_2018 >= agged$pilot, 1, -1)
, ifelse(agged$data_2018 >= agged$all, 1, -1)
, ifelse(agged$data_2018 >= agged$general, 1, -1))
但那是返回
错误 每个参数必须产生正整数或负整数。
希望预期的输出类似于:
data_2018 | vs_data_2017 | vs_pilot | vs_all | vs_general
4 | 1 | 1 | -1 | 1
4 | 1 | 1 | -1 | 1
4 | -1 | 1 | 1 | 1
4 | -1 | -1 | 1 | 1
3 | 1 | -1 | 1 | 1
4 | -1 | 1 | 1 | -1
我已经尝试单独运行 ifelse 部分并返回正确整数的向量,所以我不确定还有什么可以尝试的。即使没有dplyr,有没有办法做到这一点?希望没有那个包也能做到这一点。
【问题讨论】:
-
你的预期输出是什么?
-
已添加,但与数据不匹配
标签: r