繁体   English   中英

仅使用0和1值转换数据集

[英]Transforming Dataset with only 0 and 1 values

我不确定该怎么称呼,所以我将尽力描述问题所在。 我有一个仅由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中的数据集,以便创建新列(房间数#)并为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 statemt,以根据列位置为每个1赋予一个值,例如。 如果V4中的值= 1,则命名为“ vhigh”。 并为每个Vx执行此操作
  2. 然后合并每个列V1:V4,V5:V8,V9:V11(取决于它是否具有3-4个可能的阶乘/整数值),而忽略0个值。

这行得通吗,还是有一种更简单的方法? 如何在R中对此进行编码?

您可以使用功能which()类似于

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

有趣的部分是在每行上使用which(x ==1) 这将为您提供包含一个索引的所有索引的数组。 其中的第一个可以用于您的情况(假设每行只有一个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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM