0

さまざまなクラスの動作/プロパティに関連するいくつかの質問があります。

クラス文字の列を使用してデータフレームを作成しようとすると、係数を使用してデータフレームが作成されます。

df1 <- data.frame(var1= character())
str(df1)

これはと同じです

df2 <- data.frame(var1= factor())
str(df2)

最初のケースのクラスではないのはなぜchrですか?

時間変数を追加しようとすると、たとえば文字と組み合わせてエラーが発生します。これは機能します:

df3 <- data.frame( var1=as.POSIXct(0,origin="2012-12-31"))
str(df3)

これはしません:

df4 <- data.frame(var1= character(0),var2=as.POSIXct(0,origin="2012-12-31"))
str(df4)

しかし、これらは行います:

df4.1 <- data.frame(var1= character(1),var2=as.POSIXct(0,origin="2012-12-31"))
str(df4.1)

df4.2 <- data.frame(var1= factor(0),var2=as.POSIXct(0,origin="2012-12-31"))
str(df4.2)

この動作は、文字、数値、および整数のクラスを持つレベルまたは形式(因子または日付クラスに存在する)がないことに関連しているようです。

4

2 に答える 2

3

最初の質問でstringsAsFactors = TRUEは、を作成するときのデフォルトはですdata.frame。変更すると、期待どおりの結果が得られます。

> df1a <- data.frame(var1= character())
> str(df1a)
'data.frame':   0 obs. of  1 variable:
 $ var1: Factor w/ 0 levels: 
> df1b <- data.frame(var1= character(), stringsAsFactors=FALSE)
> str(df1b)
'data.frame':   0 obs. of  1 variable:
 $ var1: chr 

あなたの2番目のもののために、character(0)そしてfactor(0)異なるものです。character()と同じですが、とcharacter(0)factor()異なりますfactor(0)

これを試して:

> a <- character()
> b <- character(0)
> A <- factor()
> B <- factor(0)
> sapply(list(a=a, b=b, A=A, B=B), length)
a b A B 
0 0 0 1 

具体的には、から?character、使用法は次の形式になります。

character(length = 0) ## Just the one argument

から?factor、使用法は次の形式になります。

factor(x = character(), levels, labels = levels,
       exclude = NA, ordered = is.ordered(x))

ここで、最初の項目は、ファクターを作成するために使用する値です。

于 2013-03-22T09:44:55.910 に答える
2

読んでくださいhelp(data.frame)

df1:この動作はstringsAsFactorsパラメータによって制御されます。

df4var1長さ0、var2長さ1です。data.frame内のすべての列は同じ長さである必要があります。通常、短い方のベクトルがリサイクルされますが、長さが0のベクトルではそれは不可能です。

df4.2factor(0)長さ0の因子変数を返しませんが、値0の因子を返します。したがって、両方の列は同じ長さです。

于 2013-03-22T09:44:13.597 に答える