我将原始数据作为单个向量获取,我需要将其扩展为多维数据帧。我实际上不知道如何开始,所以我还没有尝试。看起来应该很容易,但我就是不知道怎么做。
a <- head(letters, 5)
b <- c(runif(1), rnorm(1), runif(1, 1000, 1000000),
rnorm(1, 500, 25), letters[sample(c(1,2,3,4,5), 1)])
c <- c(runif(1), rnorm(1), runif(1, 1000, 1000000),
rnorm(1, 500, 25), letters[sample(c(1,2,3,4,5), 1)])
d <- c(runif(1), rnorm(1), runif(1, 1000, 1000000),
rnorm(1, 500, 25), letters[sample(c(1,2,3,4,5), 1)])
e <- c(runif(1), rnorm(1), runif(1, 1000, 1000000),
rnorm(1, 500, 25), letters[sample(c(1,2,3,4,5), 1)])
我得到的数据看起来像这样。
> rawdf <- as.data.frame(c(a, b, c, d, e))
> rawdf
c(a, b, c, d, e)
1 a
2 b
3 c
4 d
5 e
6 0.712994893779978
7 -0.211754143617065
8 756868.79894766
9 470.390066195036
10 e
11 0.913559435168281
12 -0.657295337527431
13 96914.3249201588
14 534.330042260282
15 b
16 0.467024271842092
17 1.41803341429509
18 391901.635789312
19 480.449629709666
20 e
21 0.941028218949214
22 -0.0518537306593079
23 482361.213333672
24 508.018938268093
25 d
我需要把它改成这个样子。
> dfIwant <- rbind(a, b, c, d, e)
> dfIwant
[,1] [,2] [,3] [,4] [,5]
a "a" "b" "c" "d" "e"
b "0.712994893779978" "-0.211754143617065" "756868.79894766" "470.390066195036" "e"
c "0.913559435168281" "-0.657295337527431" "96914.3249201588" "534.330042260282" "b"
d "0.467024271842092" "1.41803341429509" "391901.635789312" "480.449629709666" "e"
e "0.941028218949214" "-0.0518537306593079" "482361.213333672" "508.018938268093" "d"
如果第一行实际上只是列名就更好了。
a b c d e
1 "0.712994893779978" "-0.211754143617065" "756868.79894766" "470.390066195036" "e"
2 "0.913559435168281" "-0.657295337527431" "96914.3249201588" "534.330042260282" "b"
3 "0.467024271842092" "1.41803341429509" "391901.635789312" "480.449629709666" "e"
4 "0.941028218949214" "-0.0518537306593079" "482361.213333672" "508.018938268093" "d"
答案 0 :(得分:1)
我们可以将列提取为向量,将其转换为具有 5 列的 matrix
,然后转换为 data.frame
并转换列的 type
v1 <- rawdf[[1]]
out <- as.data.frame(matrix(v1[-(1:5)], ncol = 5,
dimnames = list(NULL, v1[1:5]), byrow = TRUE))
out <- type.convert(out, as.is = TRUE)
-输出
out
# a b c d e
#1 0.4426336 0.9835135 430029.3 528.1451 d
#2 0.2334152 -0.2088368 542520.7 470.5161 d
#3 0.5565016 2.7084698 647044.8 482.3013 d
#4 0.8286324 0.6518627 260767.8 487.6383 b
str(out)
#'data.frame': 4 obs. of 5 variables:
# $ a: num 0.443 0.233 0.557 0.829
# $ b: num 0.984 -0.209 2.708 0.652
# $ c: num 430029 542521 647045 260768
# $ d: num 528 471 482 488
# $ e: chr "d" "d" "d" "b"