R 将 <key, val> 对转换为 data.frame

标签 r vector dataframe

在 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 中的键应添加零值。

最佳答案

这是一种基于环境的方法。制作单独的环境,在其中评估 name=val 对。然后合并它们:

xe <- new.env()
ye <- new.env()
with(xe, eval(parse(text=x)))
with(ye, eval(parse(text=y)))
# > ls(env=ye)
# [1] "A" "B" "C" "D" "H"
# edit as. list makes even more compact!
 df1 <- merge(as.list(xe), as.list(ye), all=TRUE, sort=FALSE)  
 # sort keeps row order with x on top!
  A B D  E  F  G  C  H
1 5 1 1  1  2  1 NA NA
2 2 1 1 NA NA NA  3  4

 df1[is.na(df1)] <- 0
 df1
  A B D E F G C H
1 2 1 1 0 0 0 3 4
2 5 1 1 1 2 1 0 0

使用 reshape::rbind.fill 方法解决了两个参数相等导致丢失一行的问题。
df1 <- rbind.fill(as.data.frame(as.list(xe)), as.data.frame(as.list(ye)) )

关于R 将 <key, val> 对转换为 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8127869/

相关文章:

r - 是否可以在 ggplot2 中使用 facet_grid() 仅在一个子图中显示 annotation_logtics()?

c++ - 尝试对随机 [1-100 000] 长度的 vector 进行子矢量化

c++ - 存取错误的问题(下方附有程式码)

python - DataFrame 列的笛卡尔积并在 Python 中将新创建的行设置为 0

r - 如何将数据框转换为热图格式?

减少行梯队形式

r - 将不等长的向量组合成一个数据帧

java - 索引越界异常,我写的函数挂掉了

python - 使用 Pandas,如何匹配系列中的多个索引、匹配 DataFrame 并替换多列

scala - 我有一个以 Map 作为列数据类型的表,如何将其分解以生成 2 列,一列用于映射,一列用于键?