簡體   English   中英

R數據框行名稱顯示矩陣而不是數值

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

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