Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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 基于vaues将数据帧转换为2列数据帧_R_Reshape - Fatal编程技术网

R 基于vaues将数据帧转换为2列数据帧

R 基于vaues将数据帧转换为2列数据帧,r,reshape,R,Reshape,我正在尝试将多列数据帧转换为2列数据帧。每行是一个人(基于第一列中的id),具有多个属性。如何在两列中列出每个人和属性 例如: temp<-data.frame(V1 = c(1,2,3),V2 = c(4,5,6)) row.names(temp)<-c("person1","person2","person3") temp V1 V2 person1 1 4 person2 2 5 person3 3 6 res<-data.fr

我正在尝试将多列数据帧转换为2列数据帧。每行是一个人(基于第一列中的id),具有多个属性。如何在两列中列出每个人和属性

例如:

 temp<-data.frame(V1 = c(1,2,3),V2 = c(4,5,6))
 row.names(temp)<-c("person1","person2","person3")
 temp
         V1 V2
 person1  1  4
 person2  2  5
 person3  3  6
 res<-data.frame(person=c("person1","person1","person2","person2","person3",
         "person3"),val= c(1,4,2,5,3,6))
 res
     person val
 1 person1   1
 2 person1   4
 3 person2   2
 4 person2   5
 5 person3   3
 6 person3   6
temphadley解决方案:

library(dplyr)
library(tidyr)

temp %>% 
   add_rownames() %>% 
   gather(col, val, -rowname) %>% 
   select(-col)

无需额外软件包的Base R解决方案:

> temp$person <- row.names(temp)
> row.names(temp) <- NULL
> temp
  V1 V2  person
1  1  4 person1
2  2  5 person2
3  3  6 person3

> reshape(data = temp,
+         varying = list(c("V1","V2")),
+         v.names = "val",
+         idvar = "person",
+         direction = "long")
           person time val
person1.1 person1    1   1
person2.1 person2    1   2
person3.1 person3    1   3
person1.2 person1    2   4
person2.2 person2    2   5
person3.2 person3    2   6
>临时$person行。名称(临时)临时
V1 V2人
1 4个人1
2 5个人2
3人
>重塑(数据=温度,
+变化=列表(c(“V1”、“V2”),
+v.names=“val”,
+idvar=“person”,
+方向=“长”)
人时值
人1.1人1
人2.1人2.1人2
人3.1人3.1人3
人1.2人1.2 4
人2.2人2.5
人3.2人3.2 6

以下是我的评论,它转换为每个请求的答案

library(reshape2) 
temp$id <- rownames(temp) 
melt(temp, "id")

库(2);temp$id或
melt(如.matrix(temp))
或获得预期的
data.frame(person=row.names(temp)[row(temp)],val=c(t(temp))
或只需使用基本R.@davidernburg中的
重塑
,效果很好,如果您将其作为解决方案发布,我会接受@akruns解决方案呢?看起来短多了
melt(as.matrix(temp))