1

Price 列と Material 列を含むデータ フレームと、N 列 (各列は特定の種類の材料) を含む true/false マトリックスがあり、T/F 値は、「material」文字列がデータ マトリックスに表示されるかどうかを示します。

データ

Price    Material
2.33     Metal nickel linen cotton
3.45     silver emerald steel
7.45     cotton silk wood

マトリックス

Metal Nickel Linen Cotton Silver Emerald Steel Cotton Silk Wood
T     T      T     T      0      0       0     0      0    0
0     0      0     0      T      T       T     0      0    0  

...等。

材料に基づいて価格のサブセットを作成するにはどうすればよいですか? そのため、材料が「金属」である価格の平均、範囲モードなどを計算できます。

私の最初の解決策は、

newMat<- data$price * materialmatrix. 

次に、newMat で列操作を実行します (平均値、分位数など)。

しかし、これは残忍な方法のように思えます。なぜなら、サブセットを結合したいからです (たとえば、Metal && Cotton のあるものの平均価格など)。

私も試しました

split(data, wsearch, drop=TRUE)

しかし、警告を受けました。

Warning message:
  In split.default(x = seq_len(nrow(x)), f = f, drop = drop, ...)  
  data length is not a multiple of split variable

lapplysplitddply、およびを使用しようとしましsubsetたが、R についての私の理解は実行するのに十分ではありません。

これはおそらく非常に単純なことですが、一度に 1 つのサブセットを作成するのではなく、マトリックスを使用して複数のサブセットを作成する方法に固執しています。

どんな助けでも素晴らしいでしょう。

私は以下を見てきました

整数行列で data.frame をサブセット化する

マトリックスを別のマトリックスの id でサブセット化する

サブセットから観測を選択して、R の大きなデータフレームに基づいて新しいサブセットを作成します

R別のデータフレームの列ごとにデータフレームの列を選択する

4

1 に答える 1

1

これは、あなたの望むことですか?

library(reshape2)
library(splitstackshape)

# sample data
df <- data.frame(price = c(17, 35, 12, 26, 1.35, 10),
                 material = c("linen",
                              "wax string metal cube",
                              "Metal nickel linen cotton",
                              "brass",
                              "linen",
                              "cotton silk wood"))

# split the concatenated material variable
df2 <- concat.split(data = df, split.col = "material", sep = " ", drop = TRUE)

# replace blanks with NA
df2[df2 == ""] <- NA

# melt data to long format
df3 <- melt(df2, id.vars = "price", na.rm = TRUE)

# calculate summary stats by material (= 'value' variable)
df4 <- aggregate(price ~ value, data = df3, summary)

#     value price.Min. price.1st Qu. price.Median price.Mean price.3rd Qu. price.Max.
# 1   brass     26.000        26.000       26.000     26.000        26.000     26.000
# 2  cotton     10.000        10.500       11.000     11.000        11.500     12.000
# 3    cube     35.000        35.000       35.000     35.000        35.000     35.000
# 4   linen      1.350         6.675       12.000     10.120        14.500     17.000
# 5   metal     35.000        35.000       35.000     35.000        35.000     35.000
# 6   Metal     12.000        12.000       12.000     12.000        12.000     12.000
# 7  nickel     12.000        12.000       12.000     12.000        12.000     12.000
# 8    silk     10.000        10.000       10.000     10.000        10.000     10.000
# 9  string     35.000        35.000       35.000     35.000        35.000     35.000
# 10    wax     35.000        35.000       35.000     35.000        35.000     35.000
# 11   wood     10.000        10.000       10.000     10.000        10.000     10.000
于 2013-10-25T19:53:34.133 に答える