2010-05-12 31 views
2

我遇到了我認爲是基本R任務的問題。如何改變數據幀的行 - 用另一個值替換一個值

這是我的一個名爲「B」

Winner Color Size 
Tom Yellow Med 
Jerry Yellow Lar 
Jane Blue Med 

其中的優勝者列項因素樣本數據幀。

我試圖將數據框中的「Tom」改爲「Tom LLC」,但我無法完成。

這裏是我的嘗試:

簡單的方法: b$winner[b$winner=='Tom'] = as.factor('Tom LLC')

,但未能與 「無效因子水平的NAS生成的」

接下來,我嘗試了更高級的路線:

name_reset = function (x, y, z) { 
if (x$winner == y) {x$winner = z} 
} 

b = adply(b,1,name_reset,'Tom','Tom LLC') 

但是,失敗的是「list_to_dataframe(res,attr(.data,」split_labels「)中的錯誤): 結果長度不等「

我覺得我錯過了一些基本的東西。有人可以重定向我,或者就我上面寫的代碼提供建議嗎?非常感謝

回答

9

你想要做的是通過水平改變值。級別使您可以訪問某個因素中的標籤。以某個因子調用它會顯示標籤,並且指定給levels函數會覆蓋該因子的標籤。

一旦開始使用levels函數,您可以根據需要更改這些值。我認爲gsub可能是最簡單的。

試試這個:

levels(b$Winner) <- gsub("Tom", "Tom LLC", levels(b$Winner)) 

-mcpeterson

+0

非常感謝!我非常感謝。 – rhh 2010-05-13 01:03:12

3

我做你的數據幀,然後用dput(),使之成爲可以讓人們輕鬆地複製/它從網上粘貼的格式:

b <- structure(list(Winner = c("Tom", "Jerry", "Jane"), Color = c("Yellow", 
"Yellow", "Blue"), Size = c("Med", "Lar", "Med")), .Names = c("Winner", 
"Color", "Size"), row.names = c(NA, -3L), class = "data.frame") 

我不確定代碼中的as.factor()究竟意味着什麼。 as.factor將值的向量轉換爲因子 - 它對於單個值沒有任何意義。如果B $獲獎者是一個特徵向量,這個工程:

b$Winner[dat$Winner %in% "Tom"] <- "Tom LLC" 

如果B $得主是一個因素,那麼「湯姆有限責任公司」必須是其中的一個級別,以便您將其插入到的因素。如果B $得主是一個因素,我可能會再這樣做:

levels(b$Winner) <- c("Tom LLC", "Jerry", "Jane") 

它只是告訴[R是贏家的可能值(即,B $優勝者的水平),應及時更換。這裏的一些高級R用戶建議將你的stringsAsFactors選項設置爲FALSE ...,我使用R越多,我越同意。操縱純字符串向量然後根據需要將其彈入一個因子會容易得多。

+1

借用設置stringsAsFactors。 – mcpeterson 2010-05-12 22:42:21

+0

謝謝你的幫助。我將mcPeterson標記爲答案,因爲它直接是我所需要的,儘管我通過閱讀你的解釋瞭解了一大堆。 「stringsAsFactors = FALSE」的建議將爲我節省大量的時間。再次感謝您的幫助 – rhh 2010-05-13 01:04:14

相關問題