根据剩余的列更改第一列

use*_*870 3 replace r

我想改变组(S1...... S5)在Var1列描绘最多的FreqS1,第二大的作为S2等.请注意,这种情况下的因素是Position列中的数字.因此,对于Position == 26998698,例如,我们将与结束1587作为S1output代替S3,340S2output代替S4等.

df <- 'Var1 Freq Position
S1    1 26998698
S2  125 26998698
S3 1587 26998698
S4  340 26998698
S5    8 26998698
S1   68 27252684
S2  703 27252684
S3  913 27252684
S4  293 27252684
S5   58 27252684
S1    7 27209738
S2  383 27209738
S3 1425 27209738
S4  239 27209738
S5    6 27209738'
df<- read.table(text=df, header=T)
Run Code Online (Sandbox Code Playgroud)

我的预料 output

output <- 'Var1 Freq Position
S5    1 26998698
S3  125 26998698
S1 1587 26998698
S2  340 26998698
S4    8 26998698
S4   68 27252684
S2  703 27252684
S1  913 27252684
S3  293 27252684
S5   58 27252684
S4    7 27209738
S2  383 27209738
S1 1425 27209738
S3  239 27209738
S5    6 27209738'
output<- read.table(text=output, header=T)
Run Code Online (Sandbox Code Playgroud)

有些想法可以表现吗?

tal*_*lat 5

这是使用dplyr的方法:

library(dplyr)
df %>% 
  group_by(Position) %>% 
  mutate(Var1 = Var1[dense_rank(desc(Freq))])
#Source: local data frame [15 x 3]
#Groups: Position [3]
#
#     Var1  Freq Position
#   (fctr) (int)    (int)
#1      S5     1 26998698
#2      S3   125 26998698
#3      S1  1587 26998698
#4      S2   340 26998698
#5      S4     8 26998698
#6      S4    68 27252684
#...
Run Code Online (Sandbox Code Playgroud)

在对数据进行分组之后Position,我们计算dense_rank(即无间隙的最小等级)Freq并使用它来进行索引Var1.由于我们想要实际计算min_rank无间隙的相反,我们使用desc(Freq),即按降序排列.