将单个数据向量扩展为多列数据框

时间:2021-03-04 23:08:29

标签: r

我将原始数据作为单个向量获取,我需要将其扩展为多维数据帧。我实际上不知道如何开始,所以我还没有尝试。看起来应该很容易,但我就是不知道怎么做。

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"

1 个答案:

答案 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"
相关问题