R:向具有多个类的数据帧添加行

时间:2015-04-11 11:18:37

标签: r dataframe row

我有一个看似简单的任务,即在R中的数据框中添加一行,但我不能这样做!

我有一个包含50行和100列的数据框。数据框,我想保持相同的格式,第一列作为因子,所有其他列作为字符 - 这是lapply生成的。我只想添加第51行......但每次都会发出警告。

我添加的数据格式为Cat <- c("Cat", 1,NA,3,NA,5)。 (我不知道“或者'需要去哪里 - 对R来说很新!)

rbind每次都会显示“无效因子级别”。

e.g。 df <- rbind(df,Cat)

我认为这是因为因素/性格的差异。

1 个答案:

答案 0 :(得分:4)

data.frame中的因子级别还应包含您的&#34; Cat&#34;中的值。相关因子栏的对象。

这是一个简单的例子:

df <- data.frame(v1 = c("a", "b"), v2 = 1:2)
toAdd <- list("c", 3)

## Warnings...
rbind(df, toAdd)
#     v1 v2
# 1    a  1
# 2    b  2
# 3 <NA>  3
# Warning message:
# In `[<-.factor`(`*tmp*`, ri, value = "c") :
#   invalid factor level, NA generated

## Possible fix
df$v1 <- factor(df$v1, unique(c(levels(df$v1), toAdd[[1]])))
rbind(df, toAdd)
#   v1 v2
# 1  a  1
# 2  b  2
# 3  c  3

或者,考虑来自&#34; data.table&#34;的rbindlist,这样可以避免您必须转换因子级别:

> library(data.table)
> df <- data.frame(v1 = c("a", "b"), v2 = 1:2)
> rbindlist(list(df, toAdd))
   v1 v2
1:  a  1
2:  b  2
3:  c  3
> str(.Last.value)
Classes ‘data.table’ and 'data.frame':  3 obs. of  2 variables:
 $ v1: Factor w/ 3 levels "a","b","c": 1 2 3
 $ v2: num  1 2 3
 - attr(*, ".internal.selfref")=<externalptr>