无法将数据.frame转换为R中的数值

nhaq1z21  于 2024-01-03  发布在  其他
关注(0)|答案(2)|浏览(242)

我正在使用R中的一个名为creditcard的框架,我想从同一个框架中计算变量Debt的相关性。然而,我不知道为什么,它给了我一个错误消息,说Debt必须是数字:
cor(Debt,Limit)中的错误:“x”必须是数字
我试着用下面的代码把它转换成一个数值变量:
Debt=as.numeric(as.character(Debt))
它仍然不起作用。它变成了数字,但已经失去了它以前的400个观察结果中的大部分,这些观察结果减少到只有13个。

  1. > sapply(creditcard,class)
  2. ID Income Limit
  3. "integer" "numeric" "integer"
  4. Rating Cards Age
  5. "integer" "integer" "integer"
  6. Education Gender Student
  7. "integer" "factor" "factor"
  8. Married Ethnicity Debt
  9. "factor" "factor" "integer"

字符串
示例数据:

  1. > dput(head(Debt))
  2. c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_)


我一直在使用信用卡框架3个月了,直到最近才遇到这个问题,因为债务神秘地开始表现得像一个data.frame对象,而不是数字。任何想法,我可能会得到我的旧数字债务与所有400观察?提前感谢。

zwghvu4y

zwghvu4y1#

cor函数可以接受不同的输入。如果你给它一个矩阵或data.frame作为单个参数,它会给予你一个所有变量的相关矩阵,但是所有变量都必须是数值。
要获得creditcard Dataframe 的数值变量的所有相关性,您可以执行cor(creditcard[,sapply(credicard, is.numeric)])
否则,您可以通过为data.frame提供两个参数(cor(creditcard$Debt, creditcard$Limit)with(creditcard, cor(Debt, Limit)))来获取单个列之间的相关性。
您当前遇到的错误来自您正在调用的变量不可访问或类型错误。如果您调用cor(A, B),则A和B必须位于您当前的环境中。如果A和B是data.frame的列,则无法直接访问它们,因此您可以使用如上所示的with(creditcard, ...)公开data.frame的列,或者直接访问 Dataframe 内的列(creditcard$Acreditcard[,"A"]creditcard[["A"]])。

kyxcudwk

kyxcudwk2#

看起来我的猜测是正确的。正如在评论中提到的,基于错误消息,我假设你缺少了$-操作符来访问 Dataframe 中的变量(列)。
另一种选择,也在评论中提到,是使用with()代替。这里有一个基于{ISLR}Credit数据集的例子,我将Balance重命名为Debt

  1. library(ISLR)
  2. data(Credit)
  3. names(Credit)
  4. #> [1] "ID" "Income" "Limit" "Rating" "Cards" "Age"
  5. #> [7] "Education" "Gender" "Student" "Married" "Ethnicity" "Balance"
  6. colnames(Credit)[ncol(Credit)] = "Debt"
  7. with(Credit, cor(Limit, Debt))
  8. #> [1] 0.8616973

字符串
创建于2023-12-08带有reprex v2.0.2

相关问题