2013-12-19 68 views
-3

我是R新手,想弄清楚如何更改數據框的現有值。我在下面包含了一個快速大綱,並感謝您的幫助!R中的值替換

這是我目前有:

company  top_ten_advertiser 
'Company A'   'Is Top 10' 
'Company B'   'Is Top 10' 
'Company C'   'Is Top 10' 
'Company D'   'Is Top 10' 
…    … 
'Company X'  'Not Top 10' 
'Company Y'  'Not Top 10' 
'Company Z'  'Not Top 10' 

我想更改爲以下:

company  top_ten_advertiser 
'Company A'  'Top 10 Company' 
'Company B'  'Top 10 Company' 
'Company C'  'Top 10 Company' 
'Company D'  'Top 10 Company' 
…    … 
'Company X' 'Not Top 10 Company' 
'Company Y' 'Not Top 10 Company' 
'Company Z' 'Not Top 10 Company' 
+3

如果'top_ten_advertiser'是一個因素,只是改變它的級別。如果它是一個字符變量,則執行字符串替換或匹配。如果你不知道什麼是因素,那麼倒帶,學習一些基本的R,嘗試一些事情,然後回到我們身邊。 – Spacedman

回答

0
df$top_ten_advertiser <- gsub("Is Top 10", "Top 10 Company", df$top_ten_advertiser) 
+2

而你錯過了「不」替代。你可以用一個正則表達式來獲得兩者。 –

+0

我認爲它是可擴展的。 – stanekam

1

比方說,你的數據幀被稱爲DF。這樣做對一個字符變量:

# Add the word "Company" to all values of top_ten_advertiser 
df$top_ten_advertiser = paste(df$top_ten_advertiser, "Company", sep=" ") 
# Remove the "Is " from "Is Top 10" 
df$top_ten_advertiser = gsub("Is ", "", df$top_ten_advertiser) 

或者這一個因素變量:

# Install the plyr package if you haven't already done so using 
# install.packages("plyr") 
library(plyr) 
revalue(df$top_ten_advertiser, 
     c("Is Top 10"="Top 10 Company", "Not Top 10"="Not Top 10 Company")) 

如果你覺得痛苦的改變因素的水平,你可以在因子變量首先轉換爲字符,改變的值,然後轉換回一個因素,像這樣:

df$top_ten_advertiser = as.character(df$top_ten_advertiser) 
df$top_ten_advertiser = paste(df$top_ten_advertiser, "Company", sep=" ") 
df$top_ten_advertiser = gsub("Is ", "", df$top_ten_advertiser) 
df$top_ten_advertiser = factor(df$top_ten_advertiser) 

而且,只是爲了保證完整性,因爲馬修·倫德伯格提到用正則表達式這樣做:

tst$top_ten_advertiser = gsub("(Is)?(.*)", "\\2 Company", tst$top_ten_advertiser) 

它很簡約,但如果你是新手正則表達式,就會變得神祕。這將對字符或因子變量起作用。但是,對因子變量進行此操作會將其轉換爲字符。

+0

你只是添加'公司'。你沒有刪除'是'。 – stanekam

+0

我已更新我的答案,以解釋您的評論並添加了其他一些選項。 – eipi10

+0

如果沒有太多級別,更改一個因子的級別比字符串替換容易得多。只要做'levels(myfactor)< - thenewlevels'。 – Roland