В случае if-case для платформы Windows i.e platform.processor () просто указывается описание или фамилия процессора, например. Intel64 Family 6 Model 60 Stepping 3.
Я использовал:
if platform.system() == "Windows":
family = platform.processor()
name = subprocess.check_output(["wmic","cpu","get", "name"]).strip().split("\n")[1]
return ' '.join([name, family])
, чтобы получить фактическую модель процессора, которая является тем же самым выходом, что и if-blocks для Darwin и Linux, например Intel (R) Core (TM) i7-4790K CPU @ 4.00GHz Intel64 Family 6 Model 60 Stepping 3, GenuineIntel
Вот подход, использующий dplyr
и tidyr
из метапакета tidyverse
. Я подозреваю, что есть более простой способ сделать это в базе R ...
Сначала я определяю порядок столбцов, используя только «расположение», делая версию df1
, которая объединяет все строки в каждом столбце и рассматривает все ненулевые элементы как 1. Сортировав это, мы получаем порядок, который хотим. Затем я беру df1
со столбцами в этом порядке.
library(tidyverse)
col_order <- data_frame(cols = names(df1),
concat = apply(df1, 2, paste0, collapse = "")) %>%
mutate(concat_binary = concat %>% str_replace_all("[123456789]", "1")) %>%
arrange(desc(concat_binary)) %>%
pull(cols)
df1 %>%
select(col_order)
# g1 g2 g5 g6 g7 g10 g3 g4 g11 g8 g9
#1 1 1 3 4 4 6 0 0 0 0 0
#2 0 0 0 0 0 0 2 2 8 0 0
#3 0 0 0 0 0 0 0 0 0 2 2
#4 0 0 0 0 0 0 0 0 0 2 2
#5 0 0 0 0 0 0 0 0 0 0 0