R转换< key,val>配对成data.frame [英] R Convert <key, val> pair into data.frame
本文介绍了R转换< key,val>配对成data.frame的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在R中,我有两个这样的向量向量:
In R, I have two vectors of pairs like this:
x <- c("A=5", "B=1", "D=1", "E=1", "F=2", "G=1")
y <- c("A=2", "B=1", "C=3", "D=1", "H=4")
想将其转换成一个数据框架,如下所示:
I would like to convert this into a data.frame like this:
A B C D E F G H
x 5 1 0 1 1 2 1 0
y 2 1 3 1 0 0 0 4
x或y中包含的所有键应
All keys contained in either x or y should make up the columns, keys that do not appear in x or y should be added with value zero.
推荐答案
不是最简单的解决方案,但易于遵循:
1)将字符串解析为数据框:
df1 <- as.data.frame(sapply(strsplit(x, '='), rbind), stringsAsFactors=FALSE)
结果:
> as.data.frame(sapply(strsplit(x, '='), rbind), stringsAsFactors=FALSE)
V1 V2 V3 V4 V5 V6
1 A B D E F G
2 5 1 1 1 2 1
2)给标题:
names(df1) <- df1[1,]
df1 <- df1[-1,]
结果:
> df1
A B D E F G
2 5 1 1 1 2 1
3 )对您的其他字符串执行相同操作:
df2 <- as.data.frame(sapply(strsplit(y, '='), rbind), stringsAsFactors=FALSE)
names(df2) <- df2[1,]
df2 <- df2[-1,]
4)合并这些:
df <- merge(df1, df2, all=TRUE, sort=TRUE)
结果:
> df
A B D E F G C H
1 2 1 1 <NA> <NA> <NA> 3 4
2 5 1 1 1 2 1 <NA> <NA>
更新:以上一切都有一些基于评论的妆容:
Update: the above all-in-one with some makeup based on comments:
> df1 <- as.data.frame(sapply(strsplit(x, '='), rbind), stringsAsFactors=FALSE)
> names(df1) <- df1[1,]
> df1 <- df1[-1,]
>
> df2 <- as.data.frame(sapply(strsplit(y, '='), rbind), stringsAsFactors=FALSE)
> names(df2) <- df2[1,]
> df2 <- df2[-1,]
>
> library(reshape)
> df <- rbind.fill(df1,df2)
> df[is.na(df)] <- 0
> df <- df[, order(names(df))]
> df
A B C D E F G H
1 5 1 0 1 1 2 1 0
2 2 1 3 1 0 0 0 4
这篇关于R转换< key,val>配对成data.frame的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文