rbind到数据框的因子级别无效

Nej*_*lof 7 r

我是R的新手,我不知道如何在数据框中添加行.我添加了两个向量:

b=c("one","lala",1)
d=c("two","lele",2)
Run Code Online (Sandbox Code Playgroud)

我想将它添加到data.frame中,称为a.

a<-rbind(a,b)
Run Code Online (Sandbox Code Playgroud)

现在我有一个正确的行

      A       B      C
1    one   lala      1
Run Code Online (Sandbox Code Playgroud)

接下来我补充道

a<-rbind(a,d)
Run Code Online (Sandbox Code Playgroud)

结果是:

      A       B       C
1    one    lala      1
2     NA      NA      NA
Run Code Online (Sandbox Code Playgroud)

和控制台写我警告消息:无效因子级别,NA生成.我做错了什么或者更简单的方法来添加新行.但我不想在开始时创建完整的data.frame.我想添加线条.

Ern*_*t A 11

当你这样做

c("one","lala",1)
Run Code Online (Sandbox Code Playgroud)

这会创建一个字符串向量.将1被转换为字符类型,使得在所述载体的所有元素具有相同的类型.

然后rbind(a,b)将尝试组合a哪个是数据框,b 哪个是字符向量,这不是你想要的.

这样做的方法是使用rbind数据框对象.

a <- NULL
b <- data.frame(A="one", B="lala", C=1)
d <- data.frame(A="two", B="lele", C=2)

a <- rbind(a, b)
a <- rbind(a, d)
Run Code Online (Sandbox Code Playgroud)

现在我们可以看到数据框中的列a是正确的类型.

> lapply(a, class)
$A
[1] "factor"

$B
[1] "factor"

$C
[1] "numeric"

> 
Run Code Online (Sandbox Code Playgroud)

请注意,您必须在创建不同数据框时命名列,否则rbind将失败.如果你这样做

b <- data.frame("one", "lala", 1)
d <- data.frame("two", "lele", 2)
Run Code Online (Sandbox Code Playgroud)

然后

> rbind(b, d)
Error in match.names(clabs, names(xi)) : 
  names do not match previous names
Run Code Online (Sandbox Code Playgroud)