[英]R data frame row name shows matrix instead of numeric value
我有以下創建數據框的方法。 我的問題是數據框行名稱顯示為[1,],[2,],[3,],[4,]等,而不只是1,2,3,4等(有關輸出,請參見下文) 。 為什么以及如何解決此問題,使行名照常顯示(增加的數字)。
Code:
df <- data.frame(id=c("id"),nobs=c("nobs"))
df <- cbind(id,nobs)
df
id和nob是兩個具有5個數值的向量...
Current output:
id nobs
[1,] 2 3653
[2,] 4 3653
[3,] 8 1462
[4,] 10 1097
[5,] 12 732
Desired output:
id nobs
1 2 3653
2 4 3653
3 8 1462
4 10 1097
5 12 732
您的第二個命令將完全覆蓋第一個命令。 你想要的是
df <- data.frame(id=id, nobs=nobs)
由於您對cbind的輸入是向量(我認為),因此默認情況下它將返回一個矩陣。
另外,您可以通過以下方式將其強制為數據框
df <- data.frame(cbind(id, nobs))
但這太過分了。
注意:我不建議您使用這兩種方法。 如果需要data.frame
,則可以按Paul所示(或您自己完成)直接創建。 這只是為了說明為什么會發生這種情況。 盡管有時例如使用sapply
時,輸出將是一個矩陣,並且您可能希望綁定2個這樣的矩陣並將它們作為data.frame
。
從cbind
( ?cbind
)的幫助頁面:
函數cbind和rbind是S3通用的,帶有用於數據幀的方法。 如果至少一個參數是數據幀,其余參數是向量或矩陣,則將使用數據幀方法。
數據框方法
cbind數據幀方法只是data.frame(...,check.names = FALSE)的包裝。 這意味着它將拆分數據幀參數中的矩陣列,並將字符列轉換為因子,除非指定了stringAsFactors = FALSE。
因此,如果您傳遞兩個向量,則不會調用data.frame
的包裝器。 因此,您將獲得一個矩陣。
你能做什么?
1)您可以創建至少一個data.frame
參數並將其傳遞給cbind
2)用cbind
as.data.frame(.)
包裝cbind
參數。
x <- 1:5
y <- 6:10
> cbind(data.frame(x), y)
x y
1 1 6
2 2 7
3 3 8
4 4 9
5 5 10
> as.data.frame(cbind(x,y))
x y
1 1 6
2 2 7
3 3 8
4 4 9
5 5 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.