【问题标题】:How can I convert specific columns to the numeric type in a matrix (in r)? [duplicate]如何将特定列转换为矩阵中的数字类型(在 r 中)? [复制]
【发布时间】:2021-12-28 12:40:12
【问题描述】:

我有以下矩阵:

      Type   Tenor Frequency Rate      
 [1,] "SWAP" "1"   "1"       "-0.0048" 
 [2,] "SWAP" "2"   "1"       "-0.00334"
 [3,] "SWAP" "3"   "1"       "-0.00221"
 [4,] "SWAP" "4"   "1"       "-0.00135"
 [5,] "SWAP" "5"   "1"       "-0.00051"
 [6,] "SWAP" "6"   "1"       "0.00022" 
 [7,] "SWAP" "7"   "1"       "9e-04"   
 [8,] "SWAP" "8"   "1"       "0.00156" 
 [9,] "SWAP" "9"   "1"       "0.002155"
[10,] "SWAP" "10"  "1"       "0.002787"

但我需要对其中一些值进行二元运算,因此我需要将“Tenor”、“Frequency”和“Rate”列转换为数字。

我尝试使用这个函数:apply(input_matrix, 2, as.numeric) 哪个有效,它给了我这个:

      Type Tenor Frequency      Rate
 [1,]   NA     1         1 -0.004800
 [2,]   NA     2         1 -0.003340
 [3,]   NA     3         1 -0.002210
 [4,]   NA     4         1 -0.001350
 [5,]   NA     5         1 -0.000510
 [6,]   NA     6         1  0.000220
 [7,]   NA     7         1  0.000900
 [8,]   NA     8         1  0.001560
 [9,]   NA     9         1  0.002155
[10,]   NA    10         1  0.002787

但只要我用 for 循环在第一列中插入一个字符串:

for(row in 1:nrow(input_matrix)) {
  input_matrix[row, 1] <- "SWAP";
}

它将矩阵中的所有值转换回字符串:

      Type   Tenor Frequency Rate      
 [1,] "SWAP" "1"   "1"       "-0.0048" 
 [2,] "SWAP" "2"   "1"       "-0.00334"
 [3,] "SWAP" "3"   "1"       "-0.00221"
 [4,] "SWAP" "4"   "1"       "-0.00135"
 [5,] "SWAP" "5"   "1"       "-0.00051"
 [6,] "SWAP" "6"   "1"       "0.00022" 
 [7,] "SWAP" "7"   "1"       "9e-04"   
 [8,] "SWAP" "8"   "1"       "0.00156" 
 [9,] "SWAP" "9"   "1"       "0.002155"
[10,] "SWAP" "10"  "1"       "0.002787"

所以我不能对其进行操作。

如何仅将特定列转换为数字?

我也尝试过apply(input_matrix[,2:4], 2, as.numeric),但它只返回最后 3 列。

额外问题:为什么会产生这种效果(将矩阵中的所有值转换回字符串)?

【问题讨论】:

  • 矩阵是R中向量的扩展,但是有维度,所以它们只能有一种类型。您需要一个数据框,它是列表的扩展来保存不同类型的列。阅读更多here
  • 这能回答你的问题吗? How to change matrix column type in R

标签: r string matrix type-conversion numeric


【解决方案1】:

感谢您@caldwellst 的评论,我了解到矩阵中不可能有不同的类型,但我可以将矩阵转换为数据框。

因此,我以与以前完全相同的方式创建矩阵,但我没有在第一列中输入任何值,所以我有这个:

     Type Tenor Frequency     Rate
[1,]   NA     1         1 -0.00480
[2,]   NA     2         1 -0.00334
[3,]   NA     3         1 -0.00221
[4,]   NA     4         1 -0.00135
[5,]   NA     5         1 -0.00051
[6,]   NA     6         1  0.00022

然后使用input_df = as.data.frame(input_matrix) 将其转换为数据框,然后才将字符串插入第一列:

for(row in 1:nrow(input_df)) {
  input_df[row, 1] <- "SWAP";
}

现在我的数据框在最后 3 列中有数字:

  Type Tenor Frequency     Rate
1 SWAP     1         1 -0.00480
2 SWAP     2         1 -0.00334
3 SWAP     3         1 -0.00221
4 SWAP     4         1 -0.00135
5 SWAP     5         1 -0.00051
6 SWAP     6         1  0.00022

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2015-02-01
    • 2015-06-16
    • 2021-09-09
    • 2013-06-08
    • 1970-01-01
    相关资源
    最近更新 更多