2015-10-06 44 views
2
df <- data.frame(a = c("1", "1", "2", "3", "3", "4", "4", "5"),b = c(1:8)) 

我試圖創建組列df$c使得變量爲「1」,「2」和「3」,並且變量「4」和「5」在df$a被分組在一起。如何由值在列創建「組」列

a b   c 
"1" 1 "group a" 
"1" 2 "group a" 
"2" 3 "group a" 
"3" 4 "group a" 
"3" 5 "group a" 
"4" 6 "group b" 
"4" 7 "group b" 
"5" 8 "group b" 

我無法使用cut(),因爲這似乎需要2個<組。

我試圖將列a轉換爲數字類並使用ifelse()

df$a <- df$a %>% as.character %>% as.numeric 
ifelse(df$a < 4, df$c == "group a", df$c == "group b" 

但是,這強制每個變量NA

+1

這兩個答案解決一下我一直在敲打我的頭撞牆了最後2小時。我選擇了你,因爲Pierre Lafortune的解決方案需要兩個額外的規格才能爲我工作。我很感激你的幫助。 –

+0

感謝您的回覆。如果提到更多的團體,我也會使用皮埃爾拉福特的建議。另外,我想展示如何修復你的'ifelse'代碼。 – akrun

回答

2

我們只需要一個邏輯語句,即對於test,'yes'和'no'值分別是'group a'和'group b'。

df$c <- ifelse(as.numeric(df$a) < 4, 'group a', 'group b') 

但是,這可以在沒有任何ifelse

df$c <- c('group b', 'group a')[(as.numeric(df$a) < 4)+1L] 
2

如果你想使用cut可以指定中斷的外緣來完成。這對於ifelse語句是有利的,因爲它具有更大的可擴展性。如果你有很多砍分,你就不必寫出所有的條件以上的團體:

df$c <- cut(as.numeric(df$a), c(1,3,5), c("group a", "group b"), include.lowest=TRUE) 
# a b  c 
# 1 1 1 group a 
# 2 1 2 group a 
# 3 2 3 group a 
# 4 3 4 group a 
# 5 3 5 group a 
# 6 4 6 group b 
# 7 4 7 group b 
# 8 5 8 group b 
+0

但是,這裏的OP只提到了大約2組。 – akrun

+0

@akrun是的,以防萬一他們讓這個例子變得簡單。或者如果他們或者研究這個問題的其他人有更多的團體。 –

+0

這只是一個假設。如果OP僅顯示2個組和'ifelse'代碼,考慮到有100個組,我不會使用'cut'。 – akrun