【发布时间】:2017-02-07 01:53:11
【问题描述】:
我有以下数据框:
dff <- structure(list(`MCI ID` = c("070405344", "230349820", "260386435","370390587", "380406805", "391169282", "440377986", "750391394","890373764", "910367024"), `123a_1` = structure(c(16672, 16372,16730, 16688, 16700, 16783, 16709, 17033, 16786, 16675), class = "Date"),`123a_2` = structure(c(17029, 16422, 17088, 17036, 17057,17140, 17072, 17043, 17141, 17038), class = "Date"), `123a_3` = structure(c(NA_real_,NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,NA_real_, NA_real_, NA_real_), class = "Date"), `123a_4` = structure(c(NA_real_,NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,NA_real_, NA_real_, NA_real_), class = "Date"), `123a_5` = structure(c(NA_real_,NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,NA_real_, NA_real_, NA_real_), class = "Date"), max123a = structure(c(17029,16422, 17088, 17036, 17057, 17140, 17072, 17043, 17141, 17038), class = "Date")), .Names = c("MCI ID", "123a_1", "123a_2","123a_3", "123a_4", "123a_5", "max123a"), row.nam... <truncated>
我已经为123a_1 到123a_5 的每一行中的最大值设置了一列。为此,我可以使用:
dff <- mutate(dff, max123a = pmax(`123a_1`, `123a_2`, `123a_3`, `123a_4`, `123a_5`, na.rm = T))
但是,现在我需要每行的第二大。这假设在123a_3 到123a_5 中可能存在NA 以外的数据。理想情况下,我想要一个 dplyr 解决方案,这样我就可以将两个命令连接在一起,但我会接受任何事情。
【问题讨论】:
-
apply(dff, 2, function(x) max(x[x != max(x)])) -
@d.b,这与
apply(dff, 1, function(x) max(x[x != max(x)]))的轻微修改一起工作,但是它只返回NAs,有没有办法传递na.rm= T参数? -
你的
dput被截断了;再试一次。