簡體   English   中英

rbind 到數據框的無效因子級別

[英]Invalid factor level with rbind to data frame

我是 R 的新手,我不知道如何在數據框中添加行。 我添加兩個向量:

b=c("one","lala",1)
d=c("two","lele",2)

我想將此添加到名為 a 的 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。 我想添加線條。

當你做

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

還有一點,在我測試時,例如:我們有一個數據框作為 df,6 列如下,當嘗試使用rbind將第二行組合到第一行時,

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

您需要將stringsAsFactors = FALSE添加到data.frame()函數和rbind()函數中。

在某些版本的 R 中,而不是在其他版本中, rbind()會自動將字符串轉換為因子。 例如,在 R 版本 3.6.2 中,即使全局設置為options(stringsAsFactors = FALSE)rbind也會自動進行因子轉換。 在 R 版本 4.0.4 中不是這種情況,因此stringsAsFactors = FALSE不需要添加到版本 4.0.4 中的rbind()語句中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM