[英]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),你可以使用cSplit
從splitstackshape
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.