R:将行添加到具有多个 类 的数据框
R: Adding row to a dataframe with multiple classes
我有一个看似简单的任务,即在 R 中向数据框添加一行,但我做不到!
我有一个包含 50 行和 100 列的数据框。我希望保持相同格式的数据框将第一列作为一个因素,将所有其他列作为字符——这就是 lapply 产生的结果。我只想添加第 51 行......但我每次都会收到警告。
我添加的数据的格式是 Cat <- c("Cat", 1,NA,3,NA,5)
。 (我不知道 " 或 ' 需要去哪里 - R 很新!)
rbind 每次显示 "invalid factor levels"。
例如
df <- rbind(df,Cat)
我认为这是因为 factor/character 鸿沟。
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>
我有一个看似简单的任务,即在 R 中向数据框添加一行,但我做不到!
我有一个包含 50 行和 100 列的数据框。我希望保持相同格式的数据框将第一列作为一个因素,将所有其他列作为字符——这就是 lapply 产生的结果。我只想添加第 51 行......但我每次都会收到警告。
我添加的数据的格式是 Cat <- c("Cat", 1,NA,3,NA,5)
。 (我不知道 " 或 ' 需要去哪里 - R 很新!)
rbind 每次显示 "invalid factor levels"。
例如
df <- rbind(df,Cat)
我认为这是因为 factor/character 鸿沟。
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>