R의 패널 data.frame에서 비 시간 종속 변수를 포함하는 열을 식별하는 방법은 무엇입니까?

완다

각 ID별로 그룹화 된 모든 행에서 동일한 값을 갖는 변수의 열 이름을 찾을 수있는 함수를 만들고 싶습니다.

어떻게 할 수 있습니까?

example_data <- data.frame(ID = c(1,1,1,2,2,2,3,3,3,3), Age = c(1,2,3,1,2,3,1,2,3,4), Sex = factor(c("m","m","m", "f", "f", "f", "m","m","m","m" )))

    ID Age Sex
1   1   1   m
2   1   2   m
3   1   3   m
4   2   1   f
5   2   2   f
6   2   3   f
7   3   1   m
8   3   2   m
9   3   3   m
10  3   4   m

function_that_finds_the_names(example_data)

출력은 문자형 벡터 결과 여야합니다.

[1] "ID"  "Sex"

나는 이것을 시도했다

function_that_finds_the_names <- function(example_data){
    list <- split(example_data, as.factor(example_data$ID), drop = TRUE)
    z <- lapply(list, function(x) names(which(sapply(x, function(x) length(unique(x))) == 1))) 
    return(z)
}

function_that_finds_the_names(example_data)
$`1`
[1] "ID"  "Sex"

$`2`
[1] "ID"  "Sex"

$`3`
[1] "ID"  "Sex"

각 ID에 대한 이름이있는 목록을 반환하지만 각 목록 요소에 동일한 이름을 가진 벡터 하나를 추출하는 방법은 무엇입니까?

G. Grothendieck

원하는 것은 열이 ID 내에서 상수 인 열 이름이라고 가정합니다.

질문의 코드는 return(z)줄을 다음으로 바꾸면 작동합니다 .

Reduce(intersect, z)

우리는 다른 접근 방식에 대해 논의 할 것입니다. 각 열 이름에 대해 열과 해당 ID로만 구성된 두 개의 열 데이터 프레임을 가져옵니다 . 사용은 unique중복 행을 제거하고 중복이있는 경우합니다 ID남아있는 것에 값을 그 열을 제외 할 수 있습니다. 패키지가 사용되지 않습니다.

find_names <- function(data, ID = "ID") {
  const_in_id <- function(x) !anyDuplicated(unique(data[c(ID, x)])[[ID]])
  Filter(const_in_id, names(data))
}


find_names(example_data)
## [1] "ID"  "Sex"

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관