3

データに次の行名があります。

column_01.1
column_01.2
column_01.3
column_02.1
column_02.2

次のコマンドでこれらの行名を分割できます。

strsplit(rownames(my_data),split= "\\.")

リストを取得します。

[[1]]
[1] "column_01" "1"   

[[2]]
[1] "column_01" "2"   

[[3]]
[1] "column_01" "3"

...

しかし、私は最初の部分から文字を取り出し、次のように2番目の部分を完全に破棄したいので:

column_01
column_01
column_01
column_02
column_02

情報のこの部分だけを抽出するためのトリックが不足しています。unlist()とas.data.frame()でいくつかのオプションを試しましたが、うまくいきませんでした。または、文字列を分割する簡単な方法はありますか?as.character(substring(rownames(my_data),1,9))「。」の場所として使いたくない。変更できます(この例では機能しますが)。

4

2 に答える 2

8

マップ[して最初の要素を取得できます。

sapply(strsplit(rownames(my_data),split= "\\."),'[',1)

...または(より良い)正規表現を使用します:

gsub('\\..*$','',rownames(my_data))

(翻訳:(ドット文字、何か、文字列の終わり)のすべての一致を検索し、空の文字列に置き換えます)

于 2013-01-15T22:22:47.677 に答える
0

私はパッケージが好きなのでstringr、これを捨てると思いました:

str_replace(rownames(my_data), "(^column_.+)\\.\\d+", "\\1")

(私は正規表現が苦手なので^、括弧の外の方が良いかもしれません)

于 2013-01-16T02:47:34.063 に答える