Найти имена постоянных столбцов в R data.frame - PullRequest
1 голос
/ 17 января 2020

Это продолжение этого вопроса . В data.frame DATA у меня есть несколько столбцов, которые являются постоянными числами в уникальных строках первого столбца с именем study.name. Например, столбцы setting, prof и random имеют значения константа для всех строк Shin.Ellis и константа для всех строк Trus.Hsu и т. Д. Включая Shin.Ellis и Trus.Hsu, есть 10 уникальные study.name строки.

Интересно, как найти имена таких постоянных столбцов?

Решение был предоставлен ниже (см. NAMES), но мне интересно, почему "error", который не является постоянным, выводится из NAMES?

DATA <- read.csv("https://raw.githubusercontent.com/izeh/m/master/cc.csv")
DATA <- setNames(DATA, sub("\\.\\d+$", "", names(DATA)))

is_constant <- function(x) length(unique(x)) == 1L 

(NAMES <- names(Filter(all, aggregate(.~study.name, DATA, is_constant)[-1])) )

# > [1] "setting" "prof"   "error"   "random"   ## "error" is NOT a constant variable 
                                                ## BUT why it is outputted here!

# Desired output: 
# [1] "setting" "prof" "random"

1 Ответ

2 голосов
/ 17 января 2020

Нам нужно передать na.action, чтобы позаботиться о NA элементах, иначе он полностью удалит всю строку

names(Filter(all, aggregate(.~study.name, DATA, is_constant, 
            na.action = na.pass)[-1]))
#[1] "setting" "prof"    "random" 
...