Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将多行重塑为具有多个列的单行_R_Dataframe_Reshape - Fatal编程技术网

R 如何将多行重塑为具有多个列的单行

R 如何将多行重塑为具有多个列的单行,r,dataframe,reshape,R,Dataframe,Reshape,对于那些练习过重塑软件包的人来说,这似乎是一个显而易见的问题,但我正在尝试使用它的功能,但我无法找出正确的语法 让我们使用以下数据帧 df <- data.frame(matrix(1:12,ncol=3),row.names=letters[1:4]) X1 X2 X3 a 1 5 9 b 2 6 10 c 3 7 11 d 4 8 12 谢谢你这里有一个: m <- melt(cbind(df, rn=rownames(df)), id.vars='rn

对于那些练习过
重塑
软件包的人来说,这似乎是一个显而易见的问题,但我正在尝试使用它的功能,但我无法找出正确的语法

让我们使用以下数据帧

df <- data.frame(matrix(1:12,ncol=3),row.names=letters[1:4])

  X1 X2 X3
a  1  5  9
b  2  6 10
c  3  7 11
d  4  8 12
谢谢你这里有一个:

m <- melt(cbind(df, rn=rownames(df)), id.vars='rn')
cast(m, ~ rn + variable)

##   value a_X1 a_X2 a_X3 b_X1 b_X2 b_X3 c_X1 c_X2 c_X3 d_X1 d_X2 d_X3
## 1 (all)    1    5    9    2    6   10    3    7   11    4    8   12

(请注意,由于公式被翻转,排列顺序是另一种。)

由于您希望将其作为向量,因此无需对其进行
整形。您只需
unlist
it,然后使用
setNames
相应地设置名称

df.t <- as.data.frame(t(df))
vec <- unlist(df.t, use.names=FALSE) # gives a vector not matrix/data.frame
vec.names <- do.call(paste, c(expand.grid(rownames(df.t), colnames(df.t)), sep="."))
vec <- setNames(vec, vec.names)

# X1.a X2.a X3.a X1.b X2.b X3.b X1.c X2.c X3.c X1.d X2.d X3.d 
#    1    5    9    2    6   10    3    7   11    4    8   12 
df.t这也可以:

vec <- c(t(df))
names(vec) <- c(outer(colnames(df), rownames(df), paste, sep="."))

## > vec
## X1.a X2.a X3.a X1.b X2.b X3.b X1.c X2.c X3.c X1.d X2.d X3.d 
##    1    5    9    2    6   10    3    7   11    4    8   12 

vec我会用
restrape2
acast(m,.~variable+rn)
一起使用。我要说的是,@Arun。很抱歉,我不太明白你的意思:)。你可以通过做
acast(m,.~rn+variable)
@Emer来翻转结果。我相信我是在上面写的。啊。。。!!!!当我使用
expand.grid
解决方案时,我应该想到
outer
。很不错的!(+1)来自我。
df.t <- as.data.frame(t(df))
vec <- unlist(df.t, use.names=FALSE) # gives a vector not matrix/data.frame
vec.names <- do.call(paste, c(expand.grid(rownames(df.t), colnames(df.t)), sep="."))
vec <- setNames(vec, vec.names)

# X1.a X2.a X3.a X1.b X2.b X3.b X1.c X2.c X3.c X1.d X2.d X3.d 
#    1    5    9    2    6   10    3    7   11    4    8   12 
vec <- c(t(df))
names(vec) <- c(outer(colnames(df), rownames(df), paste, sep="."))

## > vec
## X1.a X2.a X3.a X1.b X2.b X3.b X1.c X2.c X3.c X1.d X2.d X3.d 
##    1    5    9    2    6   10    3    7   11    4    8   12