Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.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
在Reforme2中使用时间变量强制转换数据帧,就像使用Reformate base函数一样?_R_Reshape2 - Fatal编程技术网

在Reforme2中使用时间变量强制转换数据帧,就像使用Reformate base函数一样?

在Reforme2中使用时间变量强制转换数据帧,就像使用Reformate base函数一样?,r,reshape2,R,Reshape2,假设我有以下数据帧: d <- data.frame(id=c(1,1,1,2,2,3,3,3), time=c(1,2,3,1,2,1,2,3), var=runif(8)) d id time var 1 1 1 0.3733586 2 1 2 0.5743769 3 1 3 0.8253280 4 2 1 0.8136957 5 2 2 0.8726963 6 3 1 0.1105549 7 3 2 0.95

假设我有以下数据帧:

d <- data.frame(id=c(1,1,1,2,2,3,3,3), time=c(1,2,3,1,2,1,2,3), var=runif(8))

 d
  id time       var
1  1    1 0.3733586
2  1    2 0.5743769
3  1    3 0.8253280
4  2    1 0.8136957
5  2    2 0.8726963
6  3    1 0.1105549
7  3    2 0.9527002
8  3    3 0.5690021
我曾尝试使用
reformae2
dcast
功能来实现这一点,但没有找到方法。你知道这是否可能吗


EDIT:Ananda Mahto的评论和回答完全正确,真正的问题是当原始数据框有几个
var
列时,如何转换原始数据框。对不起,我的例子不合适。

下面的方法行得通吗

dcast(d, id ~ time)
# Using var as value column: use value.var to override.
#   id         1          2         3
# 1  1 0.2869739 0.59591690 0.8989719
# 2  2 0.4533770 0.14741778        NA
# 3  3 0.1286770 0.02465634 0.7363114

## OR, to get rid of the message:
## dcast(d, id ~ time, value.var = "var")

不过,我怀疑你问的问题有点不同(正如我在评论中提到的)。特别是,如果您从以下内容开始:

set.seed(1)
d <- data.frame(id = c(1,1,1,2,2,3,3,3), 
                time = c(1,2,3,1,2,1,2,3), 
                var1 = runif(8),
                var2 = runif(8))
让我们用“重塑2”中的
dcast
试试同样的方法。以下是我们可能会采取的方法:

library(reshape2)
dcast(d, id ~ time)
# Using var2 as value column: use value.var to override.
#   id         1          2         3
# 1  1 0.6291140 0.06178627 0.2059746
# 2  2 0.1765568 0.68702285        NA
# 3  3 0.3841037 0.76984142 0.4976992
但这不起作用,因为
dcast
需要一个
值.var
。因此,我们需要再次熔化数据

d2 <- melt(d, id.vars = c("id", "time"))
head(d2)
#   id time variable     value
# 1  1    1     var1 0.2655087
# 2  1    2     var1 0.3721239
# 3  1    3     var1 0.5728534
# 4  2    1     var1 0.9082078
# 5  2    2     var1 0.2016819
# 6  3    1     var1 0.8983897

我怀疑您的实际问题与我的答案不同,并且是基于您在有多个可能的
value.var
的情况下所做的工作。你能更新你的问题来反映这一点吗?@AnandaMahto你完全正确!太棒了,你不仅找到了答案,还找到了问题!:)
library(reshape2)
dcast(d, id ~ time)
# Using var2 as value column: use value.var to override.
#   id         1          2         3
# 1  1 0.6291140 0.06178627 0.2059746
# 2  2 0.1765568 0.68702285        NA
# 3  3 0.3841037 0.76984142 0.4976992
d2 <- melt(d, id.vars = c("id", "time"))
head(d2)
#   id time variable     value
# 1  1    1     var1 0.2655087
# 2  1    2     var1 0.3721239
# 3  1    3     var1 0.5728534
# 4  2    1     var1 0.9082078
# 5  2    2     var1 0.2016819
# 6  3    1     var1 0.8983897
dcast(d2, id ~ variable + time)
#   id    var1_1    var1_2    var1_3    var2_1     var2_2    var2_3
# 1  1 0.2655087 0.3721239 0.5728534 0.6291140 0.06178627 0.2059746
# 2  2 0.9082078 0.2016819        NA 0.1765568 0.68702285        NA
# 3  3 0.8983897 0.9446753 0.6607978 0.3841037 0.76984142 0.4976992