2017-02-05 9 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

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

私は2番目のオプションを使いました。ありがとうございました。 – Danny

1

trees$charはベクトル(1次元)です。したがって、[,]の必要はありません。これは答えに値するものではありませんが、投稿されたコメントで言及するのは難しいです。

Hey! BDWは、私が今実現し、言及する別のポイントは、あなたのコード内で使用すると、元data.frame木に戻ってそれを割り当てていないことが、サブセット化data.frameにそれが反映されません右のようである

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

@Dannyの心は、私もそれに答えているという事実で..共有 最初。ただ好奇心旺盛です –

+0

ジョエル、今日私の質問に答える時間をとってくれてありがとう、私は以前にコメントしておくべきだった。あなたは、私が名前の変更をサブセット化されたデータセットに適用していたことを指摘しましたが、これは本当に役に立ちましたが、全体的に私は「松」と「レッドウッド」の約32,000の異なる行名を持っています。 %in%の後で一緒に猫を飼う方が早いかどうか、またはあなたのコードで名前を手動で一緒に猫にする必要があるかどうかはわかりませんでした。 – Danny

+0

@Danny ohh !!それは私の間違いだった...私は実際に私の回答者を編集して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個の観測値ですが、これらの変数のうちの1つだけが(3つの他の因子レベルのうちの)「円錐」を持つことに言及しておきます。 – Danny

+1

あなたのコードを説明し、いくつかの情報を与える必要があります。 –

+0

こんにちは、Danny!私は、このようなifelseを新しいカラムを生成するためにそのサイズのデータ​​フレームに使ってきました。だから私はそれが正常であるかどうかはわかりません...しかし、私は説明がありません!まだここで学んでいる! :) – MPhD

関連する問題