Rbind()不使用具有不同名称

时间:2016-01-19 14:31:01

标签: r

我试图在现有数据集中添加一行,我从csv文件读入R中。

数据集如下所示:

         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

在命名数据集" share"之后,我尝试使用此代码向其添加第13行:

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

- &GT;它没有工作,并给了我这个警告信息:

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

但是,当我尝试使用此代码在数据集中输入具有现有字符值(&#34; AllSports&#34;)的行时:

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

- &GT;它完美地添加了行

我想知道是否需要告诉R在列#34;格式&#34;下面有一个新的字符值。在我将新行绑定到R?

之前

2 个答案:

答案 0 :(得分:2)

您的format列是factor个变量。有关详细信息,请查看str(share)str(share$format)class(share$format)levels(share$format)rbind(share, c("AllSports", 32.7)工作的原因是因为"AllSports"已经是format变量的现有因子级别。

要解决此问题,请通过以下方式将format列转换为character

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

factor变量进行一些搜索并设置因子级别以了解更多信息。此外,当您从csv读取文件时,可以强制任何字符串转换为具有选项stringsAsFactors = FALSE的因子 - 例如share <- read.csv(myfile.csv, stringsAsFactors = FALSE)

答案 1 :(得分:1)

我想到的两个解决方案

解决方案1: - 在阅读数据之前

options(stringsAsFactors = F)

或 解决方案2: - 正如@JasonAizkalns所建议的