我有一個近5000列的資料框架。以下是資料框架的片段
df= data. frame(a=c(13。 17。 19, 7, 9),
b=c(1。 3。 50,NA。 3),
c=c(NA。 NA。 NA,NA。 9))
我想把資料框單元格的值按行排列
。預期的輸出
df= data. frame(a=c(1。 1。 2,1。 1),
b=c(2。 2。 1,NA。 2),
c=c(NA。 NA。 NA,NA。 1))
uj5u.com熱心網友回復:
我們可以使用pmap在每一行上回圈(與rowwise相比會更快)并應用dense_rank
library(purrr)
library(dplyr)
df%>%
pmap_dfr(~ setNames(dense_rank(-c(. .. ))。 names(c(. ...))))。
輸出
# A tibble: 5 x 3
a b c
<int> < int> <int>/span>
1 1 2 NA
2 1 2 NA
3 2 1 NA
4 1 NA NA
5 1 2 1
或者一個更快的選擇可能是使用dapply從collapse
library(collapse)
library(data.table)
dapply(df, MARGIN = 1。 FUN = frank, ties。 方法 = 'dense', na. 最后 = "keep")。
a b c
1 2 1 NA
2 2 1 NA
3 1 2 NA
4 1 NA NA
5 2 1 2
uj5u.com熱心網友回復:
df <- data. frame(a=c(13。 17, 19。 7,9)。 b=c(1。 3。 50,NA。 3)。 c=c(NA。 NA,NA。 NA,9))
應用(X = -df。 MARGIN = 1, FUN = rank, ties。 方法 = "min", na.last = "keep")
#> [,1] [,2] [,3] [,4] [,5]
#> a 1 1 2 1 1
#> b 2 2 1 NA 3
#> c NA NA NA 1
轉載
t(apply(X = -DF, MARGIN = 1, FUN = rank, ties。 方法 = "min", na. 最后 = "keep"))。
#> a b c
#> [1,] 1 2 NA
#> [2,] 1 2 NA
#> [3,] 2 1 NA
#> [4, ] 1 NA NA
#> [5,] 1 3 1
注意領帶的行為與你預期的不同,例如,第五行。
uj5u.com熱心網友回復:
df= data. frame(a=c(13。 17。 19, 7, 9),
b=c(1。 3。 50,NA。 3),
c=c(NA。 NA。 NA,NA。 9))
library(tidyverse)
out <- df %>%
rowwise() %>%
transmute(res = list(dense_rank(-c_across(a。 c))) %> %
unnest_wider(res)
names(out) < - names(df)
出
#> # A tibble: 5 x 3
#> a b c
#> <int> <int> <int>/span>
#> 1 1 2 NA
#> 2 1 2 NA
#> 3 2 1 NA
#> 4 1 NA NA
#> 5 1 2 1
創建于2021-09-20,由reprex包(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322195.html
標籤:
