Вот подход, использующий 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
Есть несколько вариантов:
ps -fp <pid>
cat /proc/<pid>/cmdline | sed -e "s/\x00/ /g"; echo
Больше информации в / proc /
в Linux, просто посмотрите.
В других Unixes все может быть иначе. Команда ps
будет работать везде, а материал / proc
зависит от ОС. Например, в AIX отсутствует cmdline
в / proc
.
В Linux
cat /proc/<pid>/cmdline
получает командную строку процесса (включая аргументы), но со всеми пробелами, замененными на символы NUL.