向具有多个类别的数据框中添加行。

6
我有一个看似简单的任务,需要在R中向数据框添加一行,但我做不到!
我的数据框有50行和100列。数据框的第一列是因子,所有其他列都是字符 - 这是lapply生成的。我只想添加第51行...但每次都会出现警告。
我的添加数据的形式为 Cat <- c("Cat", 1,NA,3,NA,5)。(我不知道 " 或 ' 应该放在哪里 - 对R很陌生!)
rbind 每次都显示 "invalid factor levels"。
例如:df <- rbind(df,Cat) 我认为这是因为因子/字符分歧的缘故。

所以请确保它们具有相同的因子水平,然后再尝试使用 rbind - A5C1D2H2I1M1N2O1R2T1
此外,如果只是针对一行数据,使用list比使用c更好。 - A5C1D2H2I1M1N2O1R2T1
1个回答

5

您的 data.frame 中的因子水平应该包含与相关因子列中的 "Cat" 对象相对应的值。

这是一个简单的例子:

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

或者,考虑使用"data.table"中的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> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接