使用匹配对数据框进行排序时,行会被删除

问题描述

我具有许多行的原始数据框(我知道它们已被复制)

> dput(DATA)
structure(list(N_b = c(5,5,5),N_l = c(4,4,3,3),S = c(12,12,15,9,9),Proposed.Girder3 = c(0.52,0.52,0.65,0.51,0.51),Lanes = c(4,UG = c(100,100,108,116,124,84,92,92),CSi = c(0.498857761911128,0.506171857609652,0.491697098095741,0.5060648860829,0.51602587099039,0.49808311021839,0.484326916022697,0.486261403372008,0.484696645284676,0.542438052075464,0.501306385491762,0.634937543079967,0.642078412670016,0.618943708143363,0.642001779473278,0.658268730337476,0.630133634378208,0.61289410586889,0.615963132516221,0.615769133902813,0.686518342284576,0.63848257046785,0.477839632977349,0.481308189937141,0.466821213798956,0.484416044616133,0.495362194700848,0.47320175377938,0.46075484570102,0.462933293434182,0.46296944030225,0.519970813725933,0.478798800223883,0.499649613847278,0.50349372475143,0.490922567156329,0.506660508807011,0.514932254618641,0.497406049605651,0.483910162470329,0.484700178543721,0.483690038460146,0.541097742382397,0.49864706679875,0.638103261594521,0.645030188324246,0.622321358649241,0.644932774331382,0.661080914216008,0.633266424051986,0.616403425794446,0.619662818975923,0.619368626094409,0.689062534462536,0.641640617456748,0.481809699169021,0.484780552887199,0.471041353094871,0.489040154106175,0.499309812059152,0.477094533923277,0.46479660834156,0.467205762187312,0.465930259455921,0.524495868736496,0.482408228794972,0.498202392725583,0.502618858440184,0.489487329812287,0.503840707835284,0.514021291777706,0.495297263755732,0.482202022708633,0.483839116286323,0.539456419577533,0.539456419855875,0.498082441376597,0.630858086293792,0.63756198028618,0.615358704038841,0.637489319425201,0.653397114261802,0.625957013049853,0.609464834716713,0.612676084901444,0.612530536192196,0.612530533035217,0.63430804238461,0.48126980512503,0.484644526574109,0.470238034678857,0.487935539905689,0.49887970982208,0.476533589513863,0.464212956954452,0.466465412750473,0.46642671330667,0.52379164029609,0.48210024308779,0.495313482556363,0.499430830726606,0.486650554549094,0.501074567462105,0.511559881655238,0.492318751733689,0.479463896518796,0.480962859032664,0.479819940340815,0.536420385604673,0.494978560935791,0.628848475181058,0.63411772566777,0.613650360338718,0.637687298501148,0.651062927764633,0.624780782896341,0.608015537732378,0.609978147167127,0.610267677247537,0.679026578215092,0.630653747823922,0.484330062840347,0.483272947533652,0.469030546777778,0.486654560445457,0.497498231247353,0.475287888336171,0.46299937090013,0.465252231525678,0.465143863657343,0.52242431063692,0.480777563607102,0.509393190572395,0.0306794102100841,0.499801210623311,0.514261273631288,0.524257222129056,0.507090829156798,0.492293988923706,0.494634579696826,0.492902890462201,0.551785598208862,0.510878424089161,0.639185175219647,0.646663818507054,0.622627268125056,0.646370988091098,0.662988587960886,0.634650836091679,0.616659986042537,0.619748241531646,0.61951439818747,0.691805427278811,0.64284460028603,0.484887769151249,0.48865031929918,0.473940218959181,0.484917825918303,0.496960554187183,0.473813537802849,0.461261792526738,0.463580335134683,0.463394052048788,0.520637868360136,0.479413561159061,0.503027081012421,0.508886440468214,0.493841291641758,0.508191035709441,0.517649011896045,0.500464428119884,0.486297995480364,0.48821271352713,0.486779215307284,0.544834557703888,0.503994168801514,0.63420530022389,0.641441566573504,0.617939244523909,0.641442341788609,0.657759058843292,0.629532366426079,0.611898297010965,0.615054071992963,0.614543613798064,0.686239403738044,0.637751280776591,0.476610456219972,0.480071378890351,0.465670604256241,0.483172142840914,0.494035003336151,0.472023145046551,0.459586167724079,0.461826826254301,0.461674647472426,0.518534655365997,0.477607992305144)),row.names = c(NA,-198L),class = "data.frame")

我尝试根据S列对它进行排序,

target <- c(12,9)
DATA <- DATA[match(target,DATA$S),]

结果是一个3行数据框,但我想保持相同的行数并对其进行排序

> dput(DATA)
structure(list(N_b = c(5,100),0.477839632977349)),row.names = c(1L,12L,23L),class = "data.frame")

解决方法

这是关于方法的回合:

library(dplyr)
data %>%
  # convert S to factor and specify order
  mutate(S = factor(S,levels = c(12,15,9))) %>%  
  # sort by levels of S factor
  arrange(S) %>%
  # convert S back to numeric (need to go through character or weirdness happens)
  mutate(S = as.numeric(as.character(S)))
,

应该颠倒match中的顺序,并且需要order的输出match

target <- c(12,9)
DATA <- DATA[order(match(DATA$S,target)),]