我有一个看似简单的任务,就是在R中的数据框中添加一行,但我无法做到!
我有一个50行和100列的数据框.数据框,我想保持相同的格式,第一列作为因子,所有其他列作为字符 - 这是lapply生成的.我只想添加第51行......但每次都会发出警告.
我添加的数据是表格Cat <- c("Cat", 1,NA,3,NA,5).(我不知道"或"需要去哪里 - 对R来说很新!)
rbind每次都显示"无效因子水平".
例如
df <- rbind(df,Cat)
我相信这是因为因素/性格的差异.
您的因子水平data.frame还应包含“Cat”对象中相关因子列的值。
这是一个简单的例子:
\n\ndf <- 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\nRun Code Online (Sandbox Code Playgroud)\n\n或者,考虑rbindlist“data.table”,这应该使您不必转换因子水平:
> 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> \nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1066 次 |
| 最近记录: |