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

Guy*_*Guy 6 row r dataframe

我有一个看似简单的任务,就是在R中的数据框中添加一行,但我无法做到!

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

我添加的数据是表格Cat <- c("Cat", 1,NA,3,NA,5).(我不知道"或"需要去哪里 - 对R来说很新!)

rbind每次都显示"无效因子水平".

例如 df <- rbind(df,Cat)

我相信这是因为因素/性格的差异.

A5C*_*2T1 5

您的因子水平data.frame还应包含“Cat”对象中相关因子列的值。

\n\n

这是一个简单的例子:

\n\n
df <- data.frame(v1 = c("a", "b"), v2 = 1:2)\ntoAdd <- list("c", 3)\n\n## Warnings...\nrbind(df, toAdd)\n#     v1 v2\n# 1    a  1\n# 2    b  2\n# 3 <NA>  3\n# Warning message:\n# In `[<-.factor`(`*tmp*`, ri, value = "c") :\n#   invalid factor level, NA generated\n\n## Possible fix\ndf$v1 <- factor(df$v1, unique(c(levels(df$v1), toAdd[[1]])))\nrbind(df, toAdd)\n#   v1 v2\n# 1  a  1\n# 2  b  2\n# 3  c  3\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

或者,考虑rbindlist“data.table”,这应该使您不必转换因子水平:

\n\n
> library(data.table)\n> df <- data.frame(v1 = c("a", "b"), v2 = 1:2)\n> rbindlist(list(df, toAdd))\n   v1 v2\n1:  a  1\n2:  b  2\n3:  c  3\n> str(.Last.value)\nClasses \xe2\x80\x98data.table\xe2\x80\x99 and \'data.frame\':  3 obs. of  2 variables:\n $ v1: Factor w/ 3 levels "a","b","c": 1 2 3\n $ v2: num  1 2 3\n - attr(*, ".internal.selfref")=<externalptr> \n
Run Code Online (Sandbox Code Playgroud)\n