1

Rには、2つのデータフレーム「df1」と「df2」があります。df1とdf2は次のとおりです。

>df1
  date      value
1 1990-10-10  3
2 1990-10-11  2.3
3 1990-10-12  2.5

>df2
  date      value
1 1990-10-10  3
2 1990-10-11  2
3 1990-10-12  2

df1およびdf2と同じ列名を含む3番目のデータフレーム「df3」が必要です。ただし、値フィールドはdf1とdf2の値の積である必要があります。私は次の出力を期待しています

>df3
  date      value
1 1990-10-10  9
2 1990-10-11  4.6
3 1990-10-12  4

Rで可能ですか?

4

4 に答える 4

8

と長い道のりを「マージ」し、製品の製造にrbind使用します。aggregate

aggregate(value ~ date, data=rbind(df1,df2), FUN=prod)
##         date value
## 1 1990-10-10   9.0
## 2 1990-10-11   4.6
## 3 1990-10-12   5.0

データフレームfactorの列にモードがある場合は、値を抽出するために、に変換する必要があります。valuecharacternumeric

df1$value <- as.factor(df1$value)
df2$value <- as.factor(df2$value)

aggregate(as.numeric(as.character(value)) ~ date, data=rbind(df1,df2), FUN=prod)
##         date as.numeric(as.character(value))
## 1 1990-10-10                             9.0
## 2 1990-10-11                             4.6
## 3 1990-10-12                             5.0

で変換することもできますas.numeric(levels(value))[value]。詳細?factorはをご覧ください。

于 2013-03-02T17:45:20.993 に答える
5

すべての日付が同じである場合は、次を使用できます。

df3 <- df1
df3$value <- as.numeric(as.character(df3$value))
df3$value <- df3$value * as.numeric(as.character(df2$value))

日付が2つで同一でない場合は、以下の回答data.framesを使用してください@MatthewLundberg

于 2013-03-02T17:22:56.720 に答える
3

おそらく、最初mergeに2つを実行してdata.frameから、次の手順に進むことができtransformます。

> temp <- merge(df1, df2, by = "date")
> temp
        date value.x value.y
1 1990-10-10     3.0       3
2 1990-10-11     2.3       2
3 1990-10-12     2.5       2
> transform(temp, Prod = value.x * value.y)
        date value.x value.y Prod
1 1990-10-10     3.0       3  9.0
2 1990-10-11     2.3       2  4.6
3 1990-10-12     2.5       2  5.0

ここでは、両方data.frameの列名が同じであるため、「date」変数のみでマージして、両方の「value」変数が「temp」に存在するように指定しましたdata.frame

于 2013-03-02T17:26:03.207 に答える
2

df1とdf2がタイプファクターの「値」を持っているという問題を修正した後、これを試みる前に実際に行う必要があります。これを行うことができます。

df3 <- data.frame( data=df1$date, value=df1[ ,"value"]*df2[ ,"value"])

数値である必要がある要素の変換については、R-FAQ:FAQ7.10で説明されています。

于 2013-03-02T18:23:59.027 に答える