Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.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 - Fatal编程技术网

R 如何重构和折叠数据集?

R 如何重构和折叠数据集?,r,R,我有一个看起来像这样的数据集: 0 Var1 Var 2 Var3 Var4 1 2|1 2 1|2 3 1|2 4 2|1 5 2|1 6 2|1 7 1|2 8 1|2 0 G.F G.F.1 1 2|1 Var1 2 1|2 Var1 3 1|2 Var2 4 2|1 Var2 5 2|1 Var3 6 2|1 Var3 7 1|2 Va

我有一个看起来像这样的数据集:

0 Var1 Var 2 Var3 Var4
1 2|1
2 1|2
3            1|2
4            2|1
5                  2|1
6                  2|1
7       1|2
8       1|2
0 G.F  G.F.1
1 2|1  Var1
2 1|2  Var1
3 1|2  Var2
4 2|1  Var2
5 2|1  Var3
6 2|1  Var3
7 1|2  Var4
8 1|2  Var4
我想向左折叠,使它看起来像这样:

0 Var1 Var 2 Var3 Var4
1 2|1
2 1|2
3            1|2
4            2|1
5                  2|1
6                  2|1
7       1|2
8       1|2
0 G.F  G.F.1
1 2|1  Var1
2 1|2  Var1
3 1|2  Var2
4 2|1  Var2
5 2|1  Var3
6 2|1  Var3
7 1|2  Var4
8 1|2  Var4
我对重塑软件包有一个大致的想法,但到目前为止还没有找到一个优雅的解决方案。

试试这个:

library(reshape)
foo = data.frame(Var1=c("2|1","1|2","","",""),Var2=c("","","","","1|2"))
foo 
#   Var1 Var2
# 1  2|1     
# 2  1|2     
# 3          
# 4          
# 5       1|2

foo = cbind("Row"=seq(nrow(foo)),foo)
foo = melt(foo, "Row")
setNames(foo[foo$value!="", c(3,2)], c("G.F","G.F.1"))
#    G.F G.F.1
# 1  2|1  Var1
# 2  1|2  Var1
# 10 1|2  Var2

坚持到底这会让你到达你要去的地方:

#create data set
foo <- data.frame(Var1=c("2|1","1|2","","",""),Var2=c("","","","","1|2"),
    Var3=c("", "", "1|2","2|1","") ,Var4=c("","","", "1|2", ""))

#Split data frame columns into lists, counts lengths of each and put together
v <- lapply(seq_along(foo), function(i) foo[, i][foo[, i] != ""])
data.frame(G.F = unlist(v), G.F.1 = rep(colnames(foo), sapply(v, length)))
#创建数据集

foo假设您的data.frame名为
dfrm
,您需要
melt(dfrm,na.rm=TRUE)
。这几乎可以完美地工作。我搞不清楚的一个细节是:函数(I)foo[,I][foo[,I]!=“”]
part的确切用途。它似乎创造了更多的obs。比现在还多。我有一段60乘212的数据,这段代码返回636 obs。2个变量。大概只有212个OB。它的索引功能是找出哪些单元格不等于
,然后
取消列出它们。尝试
unlist(lapply(seq_-along(foo),function(i)foo[,i][foo[,i]!=”“])
查看它的功能。注:我提供了第二个答案,Ali(国际海事组织)提供了更好的答案。如果它们都不起作用,您需要使用
dput(head(dataset))