1

関数を使用して R に .csv ファイル (Excel 2010 から) をインポートしread.cv2()ます。

を取得しdataframeます。私の列の名前は日付でなければなりませんが、のようなものになりますX08.03.2013

いくつか質問があります:

  1. これらの名前を日付形式として設定するにはどうすればよいですか (行の名前の同上) ?
  2. 列の場合、日付形式を取得したら、これらの Dates で条件 (if) を使用するにはどうすればよいですか?

私は十分に明確であることを願っています。ご協力ありがとうございました。

4

2 に答える 2

5

ここにあなたが試すための小さな例があります:

データを作って読み込んでみる

# This just creates a CSV in your current working directory to play with
cat("08-03-2013;08-04-2013;08-05-2013\n0,5;0,5;0,5\n0,6;0,6;0,6\n", 
    file = "FunkyNames.csv")
read.csv2("FunkyNames.csv")
#   X08.03.2013 X08.04.2013 X08.05.2013
# 1         0.5         0.5         0.5
# 2         0.6         0.6         0.6
read.csv2("FunkyNames.csv", check.names = FALSE)
#   08-03-2013 08-04-2013 08-05-2013
# 1        0.5        0.5        0.5
# 2        0.6        0.6        0.6

ご覧のとおり、read.csv2()withを使用check.names = FALSEすると、入力ファイルにある名前をそのまま取得できます。それでは、それを使用して、いくつかのデータを抽出してみましょう。

temp <- read.csv2("FunkyNames.csv", check.names = FALSE)
## Our first attempt doesn't work
temp$08-03-2013
# Error: unexpected numeric constant in "temp$08"

## Using quotes works
temp$"08-03-2013"
# [1] 0.5 0.6

## The following would work too
## temp$`08-03-2013`
## temp$'08-03-2013'

特定の列を抽出するより効率的な方法

特定の列を抽出するより効率的な方法は、 の別のベクトルを作成し、namesdata.frame使用してそれらを日付に変換しas.Date、そのベクトルを使用して元の からサブセット化することdata.frameです。いくつかの例:

tempCols <- as.Date(names(temp), format = "%m-%d-%Y")
tempCols
temp[tempCols > "2013-08-04"]
#   08-05-2013
# 1        0.5
# 2        0.6
temp[tempCols >= "2013-08-04"]
#   08-04-2013 08-05-2013
# 1        0.5        0.5
# 2        0.6        0.6
于 2013-02-28T09:23:22.443 に答える
2

あなたの2つの質問への答え。

  1. check.names=FALSE引数を使用してcsvをロードします
  2. 列名を にすることはできませんdates。彼らはする必要がありますcharacters

ただし、列名に対して文字ベースの検索を実行し、特定の要件を満たす列のみを選択することができます

df <- as.data.frame(cbind(sample(10), sample(10)))
names(df) <- c("08.03.2013", "09.03.2013")
df
##    08.03.2013 09.03.2013
## 1           8         10
## 2           3          8
## 3           4          3
## 4           1          9
## 5           5          5
## 6           6          4
## 7          10          6
## 8           9          7
## 9           2          1
## 10          7          2


# Either do character based search using regex
df[, grep("08.03.2013", names(df)), drop = FALSE]
##    08.03.2013
## 1           8
## 2           3
## 3           4
## 4           1
## 5           5
## 6           6
## 7          10
## 8           9
## 9           2
## 10          7

df[, grep("09.03.2013", names(df)), drop = FALSE]
##    09.03.2013
## 1          10
## 2           8
## 3           3
## 4           9
## 5           5
## 6           4
## 7           6
## 8           7
## 9           1
## 10          2


# Or even convert names to Dates and then compare.
df[, as.Date(names(df), format = "%d.%m.%Y") == as.Date("2013-03-08"), drop = FALSE]
##    08.03.2013
## 1           8
## 2           3
## 3           4
## 4           1
## 5           5
## 6           6
## 7          10
## 8           9
## 9           2
## 10          7

df[, as.Date(names(df), format = "%d.%m.%Y") > as.Date("2013-03-08"), drop = FALSE]
##    09.03.2013
## 1          10
## 2           8
## 3           3
## 4           9
## 5           5
## 6           4
## 7           6
## 8           7
## 9           1
## 10          2
于 2013-02-28T09:21:41.190 に答える