0

2 つの csv ファイルがあります。1 つは複数のポイントでの測定値を含み、もう 1 つは単一ポイントの説明を含みます。約 100 の異なるポイントと 10000 の測定値がありますが、簡単にするために、2 つのポイントと測定値しかないと仮定しましょう。

データ.csv:

point1,point2,date
25,80,11.06.2013
26,70,10.06.2013

説明.csv:

point,name,description
point1,tempA,Temperature in room A
point2,humidA,Humidity in room A

これで、両方の csv をデータフレームに読み込みました。次に、データフレームの列名を変更して読みやすくします。

options(stringsAsFactors=F)
DataSource <- read.csv("data.csv")
DataDescription <- read.csv("description.csv")
for (name.source in names(DataSource)) 
{
  count = 1
  for (name.target in DataDescription$point) 
  {
    if (name.source == name.target) 
    {
      names(DataSource)[names(DataSource)==name.source] <- DataDescription[count,'name']  
    }
    count = count + 1
  }
}

だから、私の質問は次のとおりです。ループなしでこれを行う方法はありますか? そして、私がしたかどうかのように、読みやすいように名前を変更しますか? そうでない場合、なぜですか?

4

2 に答える 2

0

わかりました、最初の列と2番目の列を並べて、同じ順序のポイントで問題を回避しました。これで、説明にはデータ ソースと同じポイントがあればよいだけです。これが私の最終的なコードです:

# set options to get strings right
options(stringsAsFactors=F) 

# read in original data
DataOriginal <- read.csv("data.csv", sep = ";")
DataDescriptionOriginal <- read.csv("description.csv", sep = ";")

# sort the data
DataOrdered <- DataOriginal[,order(names(DataOriginal))]
DataDescriptionOrdered <- DataDescriptionOriginal[order(DataDescriptionOriginal$points),]

# copy data into final dataframe and replace names
Data <- DataOrdered
names(Data)[match(DataDescriptionOrdered$points, names(Data))] <- gsub(" ", "_", DataDescriptionOrdered$description)[match(DataDescriptionOrdered$points, names(Data))]

私にとって良い解決策を見つけるために貢献してくれた皆さんに感謝します!

于 2013-06-14T13:10:30.693 に答える