我在R
中工作,其中包含一個由數字變量和字符變量組成的數據框。我的數據框DF
看起來像這樣(我加dput
版本中最後部分):R中的函數cut和ifelse之間的奇怪行爲
a1 b1
1 a 10.15
2 a 25.10
3 a 32.40
4 a 56.70
5 a 89.02
6 b 90.50
7 b 78.53
8 b 98.12
9 b 34.30
10 b 99.75
在DF
變量a1
是一組變量,b1
是數值變量。然後出現困境。我想通過使用cut
函數並考慮保存在a1
中的組創建一個名爲c1
的新變量。爲此,我在下一行代碼結合兩種功能ifelse()
和cut()
:
DF$c1=ifelse(DF$a1=="a",
cut(DF$b1,breaks = c(0,25,50,70,max(DF$b1)),right = TRUE,include.lowest = TRUE),
ifelse(DF$a1=="b",
cut(DF$b1,breaks = c(0,50,max(DF$b1)),right = TRUE,include.lowest = TRUE),NA))
的代碼行工作得很好,但在c1
創建新的,他值的混亂結果。 cut()
不是顯示一個因子,而是返回整數。然後,我得到了這樣的結果:
table(DF$c1,exclude=NULL)
1 2 3 4 <NA>
2 6 1 1 0
儘管創造了休息,整數在c1
變化的結果進行分配。這在我沒有問題的情況下工作時不會發生,但在這種情況下,我不同意組內的條件。例如下一行代碼返回這樣的結果:
DF$c1=cut(DF$b1,breaks = c(0,25,50,70,max(DF$b1)),right = TRUE,include.lowest = TRUE)
table(DF$c1,exclude=NULL)
[0,25] (25,50] (50,70] (70,99.8] <NA>
1 3 1 5 0
我想知道如何解決ifelse()
和cut()
功能之間的這種行爲,因爲返回的整數產生最終結果的差異。在這個例子中,我只爲a1
變量工作,但我有一個包含很多組的大型數據庫。這就是我將這些功能組合起來以便爲每個組獲得不同裁減的原因。此外,休息時間的值可能會發生變化,因此以手動方式包括標籤可能會很長。這兩個函數的組合是否有可能爲每個組(因子)返回正確的標籤而不是整數。該dput()
版本我的數據框DF
的是下一個:
DF<-structure(list(a1 = c("a", "a", "a", "a", "a", "b", "b", "b",
"b", "b"), b1 = c(10.15, 25.1, 32.4, 56.7, 89.02, 90.5, 78.53,
98.12, 34.3, 99.75)), .Names = c("a1", "b1"), row.names = c(NA,
-10L), class = "data.frame")
感謝您的幫助!
是的,但是如何排列因子? –
你是什麼意思?對數據框中的行進行排序?或水平? – scoa
當您轉換爲字符時,因素中斷不能正確排列,因此,當您執行c1的操作時,係數的排序順序不正確。或者當您使用該因子作爲x變量時,順序都是錯誤的。 –