假设我有一个如下所示的数据表:
options(stringsAsFactors = F)
letters <- list("A", "B", "C", "D")
numbers <- list(2, 1, 1, 2)
value <- list(.44, .54, .21, .102)
test <- list(.001,.0005, .0004, .01)
DF <- data.frame(cbind(numbers, value, test))
row.names(DF) <- letters
> # DF
# numbers value test
# A 2 0.44 0.001
# B 1 0.54 5e-04
# C 1 0.21 4e-04
# D 2 0.102 0.01
我希望数据框的结构如下所示:
DF
A.numbers A.value A.test B.numbers B.value. B.test C.numbers C.value C.test D.numbers D.value D.test
2 0.44 0.001 1 0.54 5e-04 1 0.21 4e-04 2 0.102 0.01
我想我需要使用cbind或rbind,但我不确定如何!任何方向都将非常感谢!
答案 0 :(得分:3)
这是一个整齐的解决方案
library(tidyverse)
DF %>%
rownames_to_column("letters") %>%
gather(var, val, -letters) %>%
unite(let_var, c(letters, var), sep = ".") %>%
spread(let_var, val)
A.numbers A.test A.value B.numbers B.test B.value C.numbers C.test C.value D.numbers D.test D.value
1 2 0.001 0.44 1 5e-04 0.54 1 4e-04 0.21 2 0.01 0.102
答案 1 :(得分:1)
使用基数R,你可以这样做:
d = unlist(apply(DF,1,function(x) x))
d = data.frame(t(d))
返回:
A.numbers A.value A.test B.numbers B.value B.test C.numbers C.value C.test D.numbers
2.0000 0.4400 0.0010 1.0000 0.5400 0.0005 1.0000 0.2100 0.0004 2.0000
D.value D.test
0.1020 0.0100
答案 2 :(得分:0)
此外,data.table
的{{1}}支持投放多个变量,因此您可以尝试:
dcast