我确定这是重复的,但是我觉得我已经接近解决方案了。我有一个名为Data
的数据框,它具有列名和数据结构,如下所示:
Col1, Col2, Col3, Val1, Val2, Val3, Val4
U,U,A,2,3,9,4
我想将其转换为如下形式:
Types, Col1, Col2, Col3, Nums
Val1, U, U, A, 2
Val2, U, U, A, 3
Val3, U, U, A, 9
Val4, U, U, A, 4
但是我似乎无法使用reshape2
软件包。我尝试过:
library(reshape2)
melt <- melt(data)
d_melt <- dcast(melt, Col1+Col2+Col3 ~ Val1+Val2+Val3)
但是,这并不能提供我想要的正确数据形式。同样,如果我反转操作数:
d_melt <- dcast(melt, Val1+Val2+Val3 ~ Col1+Col2+Col3)
这似乎也不起作用。
我要关闭吗?我不太擅长R轴,但是我觉得我缺少一些参数(也许是不同的工具?)来显示新的字段名称。
答案 0 :(得分:2)
melt
单独可以达到以下结果:
melt(df)
# Using Col1, Col2, Col3 as id variables
# Col1 Col2 Col3 variable value
# 1 U U A Val1 2
# 2 U U A Val2 3
# 3 U U A Val3 9
# 4 U U A Val4 4
答案 1 :(得分:0)
我改用tidyr::gather
。
library(dplyr)
library(tidyr)
read.table(text = "Col1, Col2, Col3, Val1, Val2, Val3, Val4
U,U,A,2,3,9,4",
header = TRUE,
stringsAsFactors = FALSE,
sep = ",") %>%
gather(Types, Nums, starts_with("Val"))
结果:
Col1 Col2 Col3 Types Nums
1 U U A Val1 2
2 U U A Val2 3
3 U U A Val3 9
4 U U A Val4 4