0

Rには次のようなオブジェクトがあります

                        Value
    AAAAA.1569.12.32    5
    C.4586.25.65        2
    AAAAA.4568.32.54    2
    BBB.5462.23.32      3
    BBB.5425.36.25      5
    C.5658.25.24        4

そして、私はそれがこのように見えるようにしたい

                       Value    Name
     AAAAA.1569.12.32   5       AAAAA
     C.4586.25.65       2       C
     AAAAA.4568.32.54   2       AAAAA
     BBB.5462.23.32     3       BBB
     BBB.5425.36.25     5       BBB
     C.5658.25.24       4       C

私は使用しました

df$Name = rownames(df)

しかし、これはrow.namesからの文字列全体を「名前」列に入れます。どういうわけか、ピリオドの前のテキストを使用したいだけです(ピリオドや数字はありません)。誰も私がこれを行う方法を知っていますか?

ありがとう!

4

2 に答える 2

2

具体的には、最初の.文字より前のすべてのテキストを保持します。

df$Name <- sub('[.].*','', rownames(df))

正規表現で.は、任意の文字に一致することを意味します。したがって、リテラル ドットに一致させるには、文字をエスケープする必要があります。ただし、( と で囲まれた) 文字クラス内では[]do.はリテラルのドットを表します。つまり[.]、リテラル ドットのみに一致します。

それに続くのは、.*任意の数の任意の文字に一致するものです。

したがって、式は最初のリテラル.から文字列の末尾まですべてに一致し、それを空の文字列に置き換えます。

于 2013-05-23T00:22:24.847 に答える
2

2 つの代替方法を次に示します。1 つのベースと 1 つの qdap:

## df <- structure(list(Value = c(5L, 2L, 2L, 3L, 5L, 4L)), .Names = "Value", class = "data.frame", row.names = c("AAAAA.1569.12.32", 
##     "C.4586.25.65", "AAAAA.4568.32.54", "BBB.5462.23.32", "BBB.5425.36.25", 
##     "C.5658.25.24"))

df$Name <- sapply(strsplit(rownames(df), "\\."), "[", 1)

library(qdap)
df$Name <- beg2char(rownames(df), ".")
于 2013-05-23T00:40:40.363 に答える