【发布时间】:2014-09-16 14:36:17
【问题描述】:
与this one 非常相似的问题,但是有一些根本的区别。
我有一个时间戳、4 个测量列和 4 个状态列的数据集:
structure(list(Timestamp = structure(c(1409544002, 1409544006,
1409544010, 1409544014, 1409544018, 1409544022), class = c("POSIXct",
"POSIXt"), tzone = ""), A = c(0, 0, 0, 0, 0, 0), B = c(20.77579,
21.05727, 21.81632, 21.36299, 21.18629, 21.34721), C = c(16.25537,
16.45496, 16.70933, 16.1526, 16.60963, 16.76558), D = c(0, 0,
0, 0, 0, 0), SA = structure(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1",
"0"), class = "factor"), SB = structure(c(1L, 1L, 1L, 1L, 1L,
1L), .Label = c("1", "0"), class = "factor"), SC = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = c("1", "0"), class = "factor"),
SD = structure(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1",
"0"), class = "factor")), .Names = c("Timestamp", "A", "B",
"C", "D", "SA", "SB", "SC", "SD"), row.names = c(NA, 6L), class = "data.frame")
我想计算打开的列的中位数,如 S* 列中的 1 所示。
到目前为止,我可以使用以下方法逐行查找要使用的测量列:
foo[i, c(which(x = foo[i, 6:9] == 1, arr.ind = FALSE) + 1)]
其中i 是行号。
在我的代码没有变得太复杂的情况下,这是我所能得到的。我在想我可以通过将我用上面的代码行得到的列(在逐行for 循环之后)绑定到时间戳来创建一个新的数据框,用 NA 填充空白点,计算该数据的中位数帧,最后将中位数绑定到原始数据帧。但必须有更好的方法!
有什么想法吗?
编辑:
输出应如下所示:
structure(list(Timestamp = structure(c(1409544002, 1409544006,
1409544010, 1409544014, 1409544018, 1409544022), class = c("POSIXct",
"POSIXt"), tzone = ""), A = c(0, 0, 0, 0, 0, 0), B = c(20.77579,
21.05727, 21.81632, 21.36299, 21.18629, 21.34721), C = c(16.25537,
16.45496, 16.70933, 16.1526, 16.60963, 16.76558), D = c(0, 0,
0, 0, 0, 0), SA = structure(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1",
"0"), class = "factor"), SB = structure(c(1L, 1L, 1L, 1L, 1L,
1L), .Label = c("1", "0"), class = "factor"), SC = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = c("1", "0"), class = "factor"),
SD = structure(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1",
"0"), class = "factor"), Median = c(18.51558, 18.756115,
19.262825, 18.757795, 18.89796, 19.056395)), .Names = c("Timestamp",
"A", "B", "C", "D", "SA", "SB", "SC", "SD", "Median"), row.names = c(NA,
6L), class = "data.frame")
【问题讨论】:
-
您对示例数据的预期结果是什么?
-
@Thomas 我已经添加了结果数据框。
-
听起来像是在乞求
plyr包的工作。
标签: r