我是R的新手,我不知道如何在数据框中添加行。 我添加了两个向量:
b=c("one","lala",1)
d=c("two","lele",2)
我希望将其添加到名为。
的data.frame中a<-rbind(a,b)
现在我有一个正确的行
A B C
1 one lala 1
接下来我添加
a<-rbind(a,d)
结果是:
A B C
1 one lala 1
2 NA NA NA
和控制台写我警告消息:无效因子级别,NA生成。 我做错了什么或者更简单的方法来添加新行。 但我不想在开始时创建完整的data.frame。我想添加行。
答案 0 :(得分:10)
当你这样做时
c("one","lala",1)
这会创建一个字符串向量。 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)
现在我们可以看到数据框a
中的列是正确的类型。
> lapply(a, class)
$A
[1] "factor"
$B
[1] "factor"
$C
[1] "numeric"
>
请注意,您必须在创建不同数据时命名列
框架,否则rbind
将失败。如果你这样做
b <- data.frame("one", "lala", 1)
d <- data.frame("two", "lele", 2)
然后
> rbind(b, d)
Error in match.names(clabs, names(xi)) :
names do not match previous names
答案 1 :(得分:0)
我测试了一点,例如:
当尝试使用rbind
进行合并时,我们有一个数据帧为df,并有以下6列
第二行到第一行,
df <- data.frame()
df <- rbind(df, row1)
df <- rbind(df, row2)
它会像这样
col1 col2 col3 col4 col5 col6
1 1 1 Pilot Greg Andy Dwyer 95.00
2 1 1 Pilot Greg NA 92.00
如我所测试的那样,设置stringsAsFactors = FALSE
不仅应在初始化df
数据帧上发生,而且还应转换为以下内容后应用于rbind
函数:
df <- data.frame(stringsAsFactors = FALSE)
df <- rbind(df, row1, stringsAsFactors = FALSE)
df <- rbind(df, row2, stringsAsFactors = FALSE)
工作正常
col1 col2 col3 col4 col5 col6
1 1 1 Pilot Greg Andy Dwyer 95.00
2 1 1 Pilot Greg Audi Sier 92.00
答案 2 :(得分:0)
您需要将 stringsAsFactors = FALSE
添加到 data.frame()
函数和 rbind()
函数中。
在某些版本的 R 中,而不是在其他版本中,rbind()
会自动将字符串转换为因子。例如,在 R 版本 3.6.2 中,即使全局设置为 rbind
,options(stringsAsFactors = FALSE)
也会自动进行因子转换。 R 版本 4.0.4 中不是这种情况,因此不需要将 stringsAsFactors = FALSE
添加到版本 4.0.4 中的 rbind()
语句中。