web-dev-qa-db-ja.com

「。」を置き換える方法エクスポート時に単一のスペースでread.csv()によって生成された列名で?

Rを使用してデータの前処理を行っていますが、ここで私が直面している問題があります。たとえば、read.csv(filename,header=TRUE)を使用してデータを入力すると、変数名のスペースが "。"になります。たとえば、 、生成されたデータフレームでFull Codeという名前の変数がFull.Codeになりました。処理後、変数名を変更しながらwrite.xlsx(filename)を使用して結果をエクスポートします。この問題に対処するには?

さらに、出力。xlsxファイルでは、最初の列がインデックス(つまり、1からN)になり、これは私が期待していることではありません。

21
zeno tsang

あなたのセットcheck.names=FALSE in read.csvデータを読み込んでも、名前は変更されず、データを書き戻す前に編集する必要はありません。もちろん、これは、列名を引用する(場合によっては逆引用符で囲む)か、編集中に名前ではなく場所で列を参照する必要があることを意味します。

37
Greg Snow

名前にスペースを戻すには、次のようにします(エクスポートする直前-Rでは変数名にスペースを含めることができますが、これは面倒です)。

_# A simple regular expression to replace dots with spaces
# This might have unintended consequences, so be sure to check the results
names(yourdata) <- gsub(x = names(yourdata),
                        pattern = "\\.",
                        replacement = " ")
_

最初の列のインデックスを削除するには、_row.names = FALSE_をwrite.xlsx()に追加するだけです。これは、データを表形式で書き込む関数の一般的な引数です(write.csv()にもあります)。

9
Matt Parker

複数の連続するドットと後続のドットがある場合でも、ニースの列名を作成する関数(申し訳ありませんが、リファクタリングできることを知っています)を次に示します。

makeColNamesUserFriendly <- function(ds) {
  # FIXME: Repetitive.

  # Convert any number of consecutive dots to a single space.
  names(ds) <- gsub(x = names(ds),
                    pattern = "(\\.)+",
                    replacement = " ")

  # Drop the trailing spaces.
  names(ds) <- gsub(x = names(ds),
                    pattern = "( )+$",
                    replacement = "")
  ds
}

使用例:

ds <- makeColNamesUserFriendly(ds)
4
Marcin Bilski

すでに提供されている回答に追加するために、「。」を置き換える別の方法を次に示します。または、次のような方法でストリンガーパッケージで正規表現を使用して、列名に他の種類の句読点を付けます。

require(“stringr”)   
colnames(data) <- str_replace_all(colnames(data), "[:punct:]", " ")

たとえば、次を試してください:

data <- data.frame(variable.x = 1:10, variable.y = 21:30, variable.z = "const")

colnames(data) <- str_replace_all(colnames(data), "[:punct:]", " ")

そして

colnames(data)

あなたにあげます

[1] "variable x" "variable y" "variable z"
2
TimTeaFan