簡體   English   中英

將奇怪的data.frame轉換為R中的矩陣

[英]Converting strange data.frame to matrix in R

我有以下data.frame並刪除每個定界符后轉換為矩陣對象。

> data
  ID        COL1        COL2        COL3        COL4         COL5
1  1     1,2,3,4     5,6,7,8  9,10,11,12 13,14,15,16  17,18,19,20
2  2 11,12,13,14 15,16,17,18 19,20,21,22 23,24,25,26  27,28,29,30
3  3 21,22,23,24 25,26,27,28 29,30,31,32 33,34,35,36  37,38,39,40
4  4 31,32,33,34 35,36,37,38 39,40,41,42 43,44,45,46  47,48,49,50
5  5 41,42,43,44 45,46,47,48 49,50,51,52 53,54,55,56  57,58,59,60
6  6 51,52,53,54 55,56,57,58 59,60,61,62 63,64,65,66  67,68,69,70
7  7 61,62,63,64 65,66,67,68 69,70,71,72 73,74,75,76  77,78,79,80
8  8 71,72,73,74 75,76,77,78 79,80,81,82 83,84,85,86  87,88,89,90
9  9 81,82,83,84 85,86,87,88 89,90,91,92 93,94,95,96 97,98,99,100

===>

> data.new
  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]  [,21]
1   1    1    2    3    4    5    6    7    8     9    10    11    12    13    14    15    16    17    18    19     20
2   2   11   12   13   14   15   16   17   18    19    20    21    22    23    24    25    26    27    28    29     30
3   3   21   22   23   24   25   26   27   28    29    30    31    32    33    34    35    36    37    38    39     40
4   4   31   32   33   34   35   36   37   38    39    40    41    42    43    44    45    46    47    48    49     50
5   5   41   42   43   44   45   46   47   48    49    50    51    52    53    54    55    56    57    58    59     60
6   6   51   52   53   54   55   56   57   58    59    60    61    62    63    64    65    66    67    68    69     70
7   7   61   62   63   64   65   66   67   68    69    70    71    72    73    74    75    76    77    78    79     80
8   8   71   72   73   74   75   76   77   78    79    80    81    82    83    84    85    86    87    88    89     90
9   9   81   82   83   84   85   86   87   88    89    90    91    92    93    94    95    96    97    98    99    100

為此,我應該應用apply()哪些功能?

預先感謝肖恩

您實際上根本不需要apply 您可以重新讀取數據。 嘗試這三種可能性中的任何一種。

在基礎R中,(1)您可以按行將列粘貼在一起,然后使用read.csv閱讀該文本

dc <- do.call(paste, c(data, list(sep = ",")))
unname(as.matrix(read.csv(text = dc, header = FALSE)))

或者,(2)直接使用scan

matrix(scan(text = dc, what = integer(), sep = ","), length(dc), byrow = TRUE)

或者,(3),你可以使用cSplitsplitstackshape

library(splitstackshape)
unname(as.matrix(cSplit(data, 2:6)))

一個基於apply的解決方案:

t(apply(data, 1, function(x) as.numeric(unlist(strsplit(x, ",")))))

這個怎么運作?

函數apply用於將函數apply數據幀的每一行。 字符向量在逗號處分隔( strsplit )。 這將返回一個列表。 此列表將轉換為帶有unlist的向量。 接下來,使用as.numeric將字符向量轉換為數字向量。 apply函數返回一個矩陣,其中一列對應於原始數據幀中的一行。 最后,函數t用於轉置矩陣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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