[英]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.