R 基于vaues将数据帧转换为2列数据帧
我正在尝试将多列数据帧转换为2列数据帧。每行是一个人(基于第一列中的id),具有多个属性。如何在两列中列出每个人和属性 例如: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
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))