【问题标题】:Transforming Dataset with only 0 and 1 values转换只有 0 和 1 值的数据集
【发布时间】:2018-04-02 11:03:22
【问题描述】:

我不知道该怎么称呼它,所以我会尝试用外行的术语来描述问题所在。我有一个仅包含 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 中如何编码?

【问题讨论】:

    标签: r data-transform


    【解决方案1】:

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

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

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

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

    df$room = df$r1*1 + df$r2 * 2 + df$r3 *3
    

    【讨论】:

    • 我现在改成代码了,你可以看到每行有多个1。
    • 请再次编辑以向我们展示预期的输出,因为我不明白这个问题。谢谢。
    • 希望现在更有意义,感谢您的耐心。
    【解决方案2】:

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

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

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

    【讨论】:

    • 不完全遵循这里,我想我需要在返回 1 数组之前将 1 转换为其他东西,因为它们在 0 中的位置表示它们的实际值。是的,很抱歉从一开始就没有说清楚,但是每行有多个 1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    相关资源
    最近更新 更多