内容简介:翻译自:https://stackoverflow.com/questions/8127869/r-convert-key-val-pair-into-data-frame
在R中,我有两个对的向量,如下所示:
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")
我想将其转换为data.frame,如下所示:
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中包含的所有键都应构成列,未出现在x或y中的键应添加值为零.
不是最漂亮的解决方案,但很容易遵循:
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>
更新:基于评论的上述多功能一体化妆:
> 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
翻译自:https://stackoverflow.com/questions/8127869/r-convert-key-val-pair-into-data-frame
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- DNSPod将对全站SSL证书进行升级
- 传微软下月将对 Windows 团队展开架构重组
- “华盛顿本周将对中国启动‘重大猛烈攻击’”
- Edge Chromium 将对管理员权限发出警告
- 当 Atom 遇见 VSCode ,微软将对 GitHub 做 6 件事
- 有生之年系列:微软将对 Windows 的记事本进行大更新
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Nature of Code
Daniel Shiffman / The Nature of Code / 2012-12-13 / GBP 19.95
How can we capture the unpredictable evolutionary and emergent properties of nature in software? How can understanding the mathematical principles behind our physical world help us to create digital w......一起来看看 《The Nature of Code》 这本书的介绍吧!