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))