【发布时间】:2013-11-04 11:51:56
【问题描述】:
我有一个包含价格和材料列的数据框,以及一个包含 N 列的真/假矩阵(每列是一种特定类型的材料),T/F 值表示“材料”字符串是否出现在数据矩阵
数据
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 执行列操作(平均值、分位数等)
但这似乎是一种残酷的做事方式,因为我想组合子集(例如金属和棉花的平均价格)。
我也试过了
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
尝试使用lapply、split、ddply和subset,但是我对R的理解不够强,无法执行。
我知道这可能很简单,但我一直坚持如何使用矩阵创建多个子集,而不是一次创建一个子集。
任何帮助都会很棒。
我看了以下
Subsetting a data.frame with an integer matrix
subsetting matrix with id from another matrix
Select observations from a subset to create a new subset based on a large dataframe in R
R Selecting column in a data frame by column in another data frame
【问题讨论】:
-
不清楚
Data的结构是什么。如果你能提供一个可重现的例子,最好是最好的,例如给我们dput(Data)和dput(Matrix)的输出。 -
@flodel dput(head(data$Price)) c(17, 35, 12, 26, 1.35, 10) c("亚麻布","蜡线金属立方体", "黄铜", “亚麻布”)
-
dput(head(wsearch)) 结构(c(FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, ......... .FALSE), .Dim = c(6L, 140L))
-
Data 是 data.frame 而 wsearch 是 Matrix
标签: r split binary subset sapply