我有一組100個變量,從CFM_1到CFM_100。每個變量都可以取1,2,3或4中的任何值。我想創建一個名爲TEMP的新變量,如果任何CFM_1到CFM_100變量的值爲1或2,那麼它將取值1。請幫助我解決此R編程 - 根據基於100個變量的值創建新變量
回答
我的例子有點愚蠢,因爲隨機變量在這個矩陣的單個位置生成1或2的概率是1/2。對於矩陣的每一列,執行十次這樣的操作,並且對於任何給定的行,您的臨時變量將爲TRUE的概率小於1%。無論如何,在這裏。
df <- data.frame(replicate(5, sample(1:4, 10, replace = TRUE)))
names(df) <- paste("CFM", 1:ncol(df), sep = "_")
您的數據幀看起來像這樣
df
CFM_1 CFM_2 CFM_3 CFM_4 CFM_5
1 2 2 1 4 4
2 2 2 1 3 4
3 2 1 1 3 3
4 1 2 3 3 2
5 3 4 2 4 4
6 3 4 4 2 2
7 3 1 3 2 2
8 1 2 4 1 2
9 3 2 1 3 2
10 1 3 1 4 3
假設現在,你已經在你的數據幀的其他變量,你想排除。我們將使用cbind將這些列預加入並附加到您的數據框中,如下所示。
df <- cbind(replicate(3,sample(1:4, 10, replace = T)),
df,
replicate(3,sample(1:4, 10, replace = T)))
names(df)[1:3]<- paste0("Var",1:3)
names(df)[9:11] <- paste0("Var", 9:11)
現在你的DF看起來像這樣
df
Var1 Var2 Var3 CFM_1 CFM_2 CFM_3 CFM_4 CFM_5 Var9 Var10 Var11
1 4 1 4 4 1 3 1 3 1 3 1
2 4 2 3 2 4 3 2 1 2 3 3
3 4 2 4 4 2 1 1 2 2 3 2
4 4 4 2 4 4 1 3 2 2 1 2
5 4 2 1 4 4 4 1 1 2 2 2
6 1 4 2 3 1 4 4 2 1 3 2
7 3 2 4 4 2 3 4 3 1 1 1
8 1 3 3 3 3 2 3 3 2 2 2
9 3 3 2 1 4 3 4 1 4 2 1
10 2 1 1 2 1 2 4 1 2 1 1
您可以通過應用任何功能,數據的行分配值的變量temp每一行中,檢查是否有任何數據是1或2.但首先你需要找出哪些列是你的數據。
您可以使用agrep
函數來執行近似字符串匹配。它會告訴你,你的數據幀的名稱有字符他們"CFM"
如果你使用
cfm_cols <-agrep("CFM", names(df))
cfm_cols
[1] 4 5 6 7 8
temp <- apply(df[,cfm_cols], 1, function(x) any(x) %in% c(1,2))
temp
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
不如預期,他們都是TRUE
。
另一種解決方法,如果您想,就是用dplyr
庫這個
library(dplyr)
df%>% rowwise() %>% select(contains("CFM")) %>%
mutate(TEMP = any(.) %in% c(1,2))
用更有效的解決方案編輯適當的R代碼,部分被盜/從@ shayaa的答案採購...
第一行這裏只提取你感興趣的列(創建一個臨時數據幀我們將在完成後將其刪除):
new <- subset(df, select = paste0("CFM_", seq_len(100)))
df$TEMP <- 1 * (apply(new, 1, min) <= 2)
rm(new)
因此,您只需在每個整行中搜索指定的值,並將布爾結果轉換爲數字,並將其放置到原始數據框中。
抱歉,我無法破譯這個。如果可能的話,請詳細解釋一下。 CFM變量在哪裏出現在這裏? –
對不起,我應該包括一個事實,即我假設您提到的「100個變量」是100列數據框中的列。我提供的代碼查看所有列,因此不需要按名稱調用列。如果有更多的列,你需要從計算中排除,代碼會稍微改變。 – rosscova
是的情況是我有大約300列的數據框,但我只對這些100列感興趣。我明白你的解釋。但是,如果我只想包含我感興趣的語法,可以讓我知道語法上的變化。非常感謝您的幫助。 –
- 1. 根據現有變量使用R創建新變量
- 2. 是否可以根據多個變量的值創建變量?
- 3. 基於R中的滯後觀察值創建一個變量
- 4. 如何根據現有變量創建新的r數據框變量
- 5. r data.frame創建新變量
- 6. 基於另一個變量的增量創建變量
- 7. R根據變量
- 8. ansible - 根據寄存器變量的輸出創建新變量
- 9. 創建一個數據幀分類變量基於列的值
- 10. 基於變量創建DataReader
- 11. 創建一個新的變量基於其他變量在r中包含一個特定的值
- 12. Angular:基於變量值創建ng-class
- 13. 基於多個變量創建索引
- 14. 在基於幾個索引變量的R中創建索引變量
- 15. 根據最後和當前觀測變量值創建變量
- 16. 如何創建與不同的變量值的新變量,如果另一變量等於R中設定值?
- 17. R-新的變量根據組
- 18. R:創建一個基於列表的分類變量*
- 19. R - 基於序列在數據幀列表中創建變量
- 20. 根據變量值
- 21. 如何基於組變量,排名變量和stata中的值變量創建變量
- 22. SAS新變量基於新變量的優先值
- 23. R:ifelse語句創建新的變量等於第二個變量的值條件的第三個變量的值
- 24. 根據三個其他變量之間的比較創建新變量
- 25. 將變量重新編碼爲R中的兩個新變量
- 26. 根據子程序自變量創建一個常量
- 27. tcl:如何使用變量的值創建一個新變量
- 28. 在C#中,我可以創建一個變量,根據變量的變化更新它的值嗎?
- 29. 如何創建其值根據其他變量而變化的變量?
- 30. 根據其他列中值的順序創建新變量
我編輯根據您的意見我的回答。 – shayaa
非常感謝你們的回答。特別是Shayaa。令人驚歎的。 –
歡迎您點擊答案附近的複選框,選擇一個對您最有幫助的選項。 – shayaa