簡體   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