对 R 中的数据帧值进行排名
Rank the dataframe values in R
我想获取数据框中一列中前 5 个最高值的行号,并在另一个数据框中的同一行号上添加值 100,并将其他值设为 0。
我知道如何使用 order() 函数对数据框中的列进行排序/排序。
df=data.frame(a=c(345,948,290,189,3848,302,384,456,383,201,35,346,1.46,4.66,3,5,63,43,6432,4336,345,354,1245,342,523,743,248,932.5))
例如,df[order(-df$a),]
结果是
6432.00 4336.00 3848.00 1245.00 948.00 932.50 743.00 523.00 456.00 384.00 383.00 354.00 346.00 345.00 345.00 342.00 302.00 290.00 248.00 201.00 189.00 63.00 43.00 35.00 5.00 4.66 3.00 1.46
但是,我无法满足我的特定要求。
我希望将 df1 视为
0 100 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 100 100 0 0 100 0 0 0 0 0
df$b <- ifelse(df$a %in% sort(df$a, T)[1:5], 100, 0)
我们可以使用rank
函数:
df$b <- (rank(-df$a) <= 5) * 100
我想获取数据框中一列中前 5 个最高值的行号,并在另一个数据框中的同一行号上添加值 100,并将其他值设为 0。
我知道如何使用 order() 函数对数据框中的列进行排序/排序。
df=data.frame(a=c(345,948,290,189,3848,302,384,456,383,201,35,346,1.46,4.66,3,5,63,43,6432,4336,345,354,1245,342,523,743,248,932.5))
例如,df[order(-df$a),]
结果是
6432.00 4336.00 3848.00 1245.00 948.00 932.50 743.00 523.00 456.00 384.00 383.00 354.00 346.00 345.00 345.00 342.00 302.00 290.00 248.00 201.00 189.00 63.00 43.00 35.00 5.00 4.66 3.00 1.46
但是,我无法满足我的特定要求。
我希望将 df1 视为
0 100 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 100 100 0 0 100 0 0 0 0 0
df$b <- ifelse(df$a %in% sort(df$a, T)[1:5], 100, 0)
我们可以使用rank
函数:
df$b <- (rank(-df$a) <= 5) * 100