2017-05-09 1 views
1

요소 변수 (사과 또는 바나나 중 하나)가있는 일부 데이터가 있는데 값이 하나 인 데이터 세트의 위치를 ​​식별 할 수 있기를 원합니다 두 개의 연속 된 행에있는이 두 옵션 중 하나 (즉, 사과는 행 4 & 5, 바나나는 아래 행 8 &). 중복 된 함수가 여기서 유용 할 것입니다 (즉, Index out the subsequent row with an identical value in R). 그러나 나는 원하는 변수를 가진 원하는 출력을 얻는 방법을 잘 모릅니다.다음 행에 동일한 문자 값이있는 데이터 프레임의 행을 결정하십시오. R

예 데이터 :

test = structure(list(cnt = c(87L, 51L, 24L, 69L, 210L, 21L, 15L, 9L, 
    12L), type = c("apple", "banana", "apple", "banana", "banana", 
    "apple", "banana", "apple", "apple")), .Names = c("cnt", "type" 
    ), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
    -9L), spec = structure(list(cols = structure(list(cnt = structure(list(), class = c("collector_integer", 
    "collector")), type = structure(list(), class = c("collector_character", 
    "collector"))), .Names = c("cnt", "type")), default = structure(list(), class = c("collector_guess", 
    "collector"))), .Names = c("cols", "default"), class = "col_spec")) 

원하는 출력 : 나는 다음과 같은 코드를 사용하면

cnt type output 
1 87 apple FALSE 
2 51 banana FALSE 
3 24 apple FALSE 
4 69 banana TRUE 
5 210 banana TRUE 
6 21 apple FALSE 
7 15 banana FALSE 
8  9 apple TRUE 
9 12 apple TRUE 

난 그냥 사과와 바나나 모두가 중복되는 것을! :

나에게 말한다 요약을 얻을
test[!duplicated(test[,"type], fromLast=TRUE,] 

도움을 주시면 감사하겠습니다.

+0

시험 유형 % mutate (출력 = (유형 == 리드 (유형, 기본값 = 유형 [n() - 1]) | 유형 == 지연 (type, default = type [2]))' – akrun

답변

2

될 경우 우리는 길이 인코딩을 실행하려고 할 수 있습니다

x <- rle(test$type) 
x$values <- ifelse(x$lengths == 2, TRUE, FALSE) 

test$output <- inverse.rle(x) 
# > test 
# cnt type output 
# 1 87 apple FALSE 
# 2 51 banana FALSE 
# 3 24 apple FALSE 
# 4 69 banana TRUE 
# 5 210 banana TRUE 
# 6 21 apple FALSE 
# 7 15 banana FALSE 
# 8 9 apple TRUE 
# 9 12 apple TRUE 
+0

정말 고마워요! ifelse의 간단한 사용처럼. – jjulip

2

우리는 여러 가지 방법으로이를 수행 할 수 있습니다. 하나의 옵션은 rleiddata.table에서 동일한 adjacenet 요소를 기반으로 그룹화 변수를 만든 다음 논리 조건의 출력 ie (:=)를 할당하여 'output'열을 만듭니다. 요소의 수는 1보다 큰 (.N >1)

영업의 설명을 바탕으로
library(data.table) 
setDT(test)[, output := .N>1, rleid(type)] 
test 
# cnt type output 
#1: 87 apple FALSE 
#2: 51 banana FALSE 
#3: 24 apple FALSE 
#4: 69 banana TRUE 
#5: 210 banana TRUE 
#6: 21 apple FALSE 
#7: 15 banana FALSE 
#8: 9 apple TRUE 
#9: 12 apple TRUE 

, tidyverse 하나의 옵션은

library(tidyverse) 
test %>% 
    mutate(output = (type == lead(type, default = type[n()-1]))| 
        type == lag(type, default = type[2])) 
+1

두 가지 옵션에 대해 감사드립니다. 대단히 감사합니다. 두 답을 모두 받아 들일 수 있기를 바랍니다. – jjulip

관련 문제