0

我不确定该怎么称呼它,所以我将尝试用外行的方式描述问题所在。我有一个仅由 0 和 1 组成的数据框。因此,对于每个人,而不是拥有一个具有因子值的列(例如低价,4 个房间),我有

      V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
1     0  0  0  1  0  0  0  1  0   1   0   0   0   0   1   1   0   0   0   1   0
2     1  0  0  0  0  0  0  1  1   0   0   0   0   0   1   0   0   1   0   0   1
3     0  0  0  1  1  0  0  0  0   0   1   0   0   0   1   1   0   0   1   0   0
4     0  0  0  1  0  1  0  0  0   0   1   0   1   0   0   0   1   0   1   0   0

如何转换 R 中的数据集,以便创建新列(#number of rooms)并为 1(在第 4 列中)的位置提供一个 vhigh 值?我需要为此做多个解释变量。21 列代表 1000 多个观测值的 6 个变量。应该是这样的

     PurchaseP.   NumberofRooms ...
1.      vhigh.         4
2.      low.           4
3.      vhigh.         1
4.      vhigh.         2

只是在这里为前 2 个解释变量做了它,但基本上它像这样重复,每个解释变量都有 3-4 个可能的因子值。

V1:V4 = 购买价格,V5:V8 = 房间数,V9:V11 = 楼层,以此类推

在我的脑海中,这样的事情可能会奏效

  1. 创建一个 if 语句,根据列位置为每个 1 赋予一个值,例如。如果 V4=1 中的值,则命名为“vhigh”。并为每个 Vx 执行此操作
  2. 然后合并每一列 V1:V4、V5:V8、V9:V11(取决于它是否有 3-4 个可能的因子/整数值),同时忽略 0 个值。

这行得通,还是有更简单的方法?如何在 R 中编码?

4

2 回答 2

0

您可以使用类似于的函数 which()

lapply(df, function(x) { %now x is a row
    idx = which(x == 1)[1] 
    return(idx)
    })

有趣的部分是which(x ==1)在每一行上使用。这为您提供了一个包含所有索引的数组。其中第一个可以在您的情况下使用(假设您每行只有一个 1)否则,需要讨论聚合。然后可以通过为各种索引提供合理的名称来将结果列转换为一个因子。

于 2018-04-02T11:11:57.950 回答
0

如果数据集每行包含一个 1,这是一个非常简单的问题

这里根据您的图片提供您的数据(请编辑您的问题以放置代码而不是图片)

df = data.frame(r1 = 0, r2 = 1, r3 = 0)
rownames(df)<- 1

然后,您只需将您的列与房间号作为权重相加

df$room = df$r1*1 + df$r2 * 2 + df$r3 *3
于 2018-04-02T11:13:47.523 回答