2016-01-19 28 views
0

我試圖將一行添加到已從csv文件讀入R的現有數據集中。Rbind()不適用於具有不同名稱的字符數據

數據集是這樣的:

  Format PctShare 
1  NewsTalk  12.6 
2  Country  12.5 
3 AdultContemp  8.2 
4  PopHit  5.9 
5 ClassicRock  4.7 
6 ClassicHit  3.9 
7 RhythmicHit  3.7 
8 UrbanAdult  3.6 
9  HotAdult  3.5 
10 UrbanContemp  3.3 
11  Mexican  2.9 
12 AllSports  2.5 

命名數據集「共享」後,我試圖通過使用此代碼的第13行添加到它:

totalshare <- rbind(share, c("Others", 32.7) 

- >其沒有工作,給了我這個警告消息:

Warning message:In`[<-.factor`(`*tmp*`, ri, value = "Others"):invalid factor level, NA generated 

然而,當我試圖進入行與現有的字符VA在這段代碼的數據集略(「AllSports」):

rbind(share, c("AllSports", 32.7)) 

- >它增加了完美

我想知道我是否需要讓R有下一個新的字符值的行列「格式」之前,我將新行綁定到R?

+0

或者你可以'水平(如建議共享$格式)< - c(levels(share $格式),'Others')'然後'rbind',因爲沒有其他答案保留您的數據爲因素 – rawr

回答

2

您的format列是factor變量。請參閱str(share)str(share$format)class(share$format)levels(share$format)瞭解更多信息。 rbind(share, c("AllSports", 32.7)工作原因是因爲"AllSports"已經是format變量的現有因子水平。

share$format <- as.character(share$format)

請在factor變量某些搜索並設置因子水平,以瞭解更多:

要解決此問題,通過format列轉換爲character。此外,當您從csv讀取文件時,可以強制將任何字符串而不是轉換爲選項stringsAsFactors = FALSE的因子 - 例如share <- read.csv(myfile.csv, stringsAsFactors = FALSE)

+0

Thanks @JasonAizkalns!這幫了很多。在將該行添加到表後,我注意到第二個表,我將其命名爲totalshare,並將PctShare列更改爲字符!在繪製一個barplot之前,我必須將它改回爲數字和as.numeric。只要有一點觀察,以防其他人有類似的問題。 – Wwen

0

兩個解決方案,我心裏有

解決方案1: - 讀取數據

options(stringsAsFactors = F) 

或 方案2前 : - 通過@JasonAizkalns

相關問題