2017-02-05 3 views
2

조건에 따라 행 이름에 문자를 추가하려는 큰 데이터 프레임이 있습니다. 내가 문자를 추가 붙여 넣기를 사용할 수 있습니다 알고조건에 따라 행 이름에 문자를 추가하십시오.

  char number 
birch  flower 3 
pine c  cone 3 
maple  flower 5 
redwood c cone 6 

:

trees <- data.frame(char = c('flower', 'cone', 'flower', 'cone'), number = c(3, 3, 5, 6)) 
rownames(trees) <- c('birch', 'pine', 'maple', 'redwood') 

이 내가 옆에 소나무와 레드 우드에 'C', 갈거야 무엇을 : 나는 다음과 같은 예를

나는 코드의 다음 줄을하려고 할 때
# this gives the output I am looking for 
paste(rownames(trees[trees$char == 'cone',]), 'c') 

[1] "pine c" "redwood c" 

그러나, 변경 내 데이터 프레임에 표시되지 않습니다 :

rownames(trees[trees$char == 'cone',]) <- paste(rownames(trees[trees$char == 'cone',]), 'c') 

답변

1

하나의 옵션은

library(stringr) 
x1 <- str_extract(trees$char, "^c") 
row.names(trees) <- trimws(paste(row.names(trees), replace(x1, is.na(x1), ""))) 
trees 
#   char number 
#birch  flower  3 
#pine c  cone  3 
#maple  flower  5 
#redwood c cone  6 

또 다른 옵션은

row.names(trees) <- paste(row.names(trees), c("", "c")[(trees$char == "cone")+1]) 
이 대답은 허용되지 왜
+1

두 번째 옵션으로갔습니다. 고맙습니다. – Danny

1

trees$char은 벡터 (1 차원)입니다. 따라서 [,]은 필요 없습니다. 이것은 대답 할 가치가 없지만 방금 게시 된 의견에서 언급하기는 어렵습니다.

안녕하세요! BDW 내가 지금 실현 언급하는 또 다른 점은 코드에서 원래 data.frame 나무에 다시 할당되지 않습니다하지만 서브 세트 data.frame에 그 반영되지 않습니다 바로 그래서이다

rownames(trees)[trees$char == "cone"] <- paste(rownames(trees)[trees$char == "cone"], "c") 
+0

@Danny의 마음은 내가 또한 그것을 응답 한 사실을 .. 공유 먼저. 그냥 호기심 많아. –

+0

조엘, 오늘 내 질문에 답변 할 시간을 내 주셔서 감사합니다. 나는 더 일찍 의견을 남겨 두어야했다. 당신은 실제로 도움이되는 부분 집합 데이터 세트에 이름 변경을 적용하고 있다고 지적했지만 전반적으로 '소나무'와 '레드 우드'가있는 약 32,000 개의 다른 행 이름이 있습니다. 나는 % in % 후에 그것들을 함께 cat하는 더 빠른 방법이 있는지, 또는 코드가 수동으로 함께 cated 할 이름을 필요로하는지 확실하지 않았다. – Danny

+0

@ 대니 오오 !! 그게 내 실수 였어 ... 나는 실제로 내 대답을 편집하여 LHS와 RHS 모두에 대한 변경을 만들었지 만, 어떻게 든 RHS에 그것을 잊어 버렸다. 편집 한 참조 용 –

0

당신은 ifelse을 사용할 수 있습니다 함수를 사용하여 rownames를 정의합니다. char 값이 "cone"이면 "rowname"의 끝에 "c"를 붙여 넣고, 그렇지 않으면 기존 rowname을 사용합니다.

rownames(trees) <- ifelse(trees$char=="cone",paste(rownames(trees), 'c'),rownames(trees)) 
+0

코드가 분명하기 때문에 나는이 솔루션을 좋아한다. 25 분 동안 실제 데이터 세트에서 실행되었습니다. 이게 정상인가? 실제 데이터 프레임은 657 개의 변수가있는32105 개의 관측이지만 이러한 변수 중 하나에 만 3 개의 다른 요소 수준의 '원뿔'이 있음을 언급해야합니다. – Danny

+1

코드를 설명하고 정보를 제공해야합니다. –

+0

안녕하세요, 대니! 나는 이처럼 ifelse를 사용하여 새로운 컬럼을 생성하기 위해 그 크기의 데이터 프레임에서 (결코 rownames가 아니더라도), 그리고 그 어느 곳에서도 결코 오래 걸리지 않는다. 그래서 나는 그것이 정상적인 지 확신하지 못한다. 그러나 나는 설명이 없다고 두려워한다! 아직도 여기에서 배우기! :) – MPhD

관련 문제