r - 从 R 数据框列中提取键值对

标签 r dataframe

我有一个包含两列的数据框。包含以分号分隔的键值对的 ID 列和字符列。

   ID | KeyValPairs
    1 | "zx=1; ds=4; xx=6"
    2 | "qw=5; df=2"
    . | ....

我想把它变成一个三列的数据框

    ID | Key | Val
     1 | zx  | 1
     1 | ds  | 4
     1 | xx  | 6
     2 | qw  | 5
     2 | df  | 2

KeyValPairs 列中没有固定数量的键值对,也没有封闭的可能键集。我一直在研究涉及循环和重新插入空数据帧的解决方案,但它无法正常工作,我被告知我应该避免 R 中的循环。

最佳答案

tidyr 和 dplyr 方法:

整洁

library(tidyr)
library(reshape2)
s <- separate(df, KeyValPairs, 1:3, sep=";")
m <- melt(s, id.vars="ID")
out <- separate(m, value, c("Key", "Val"), sep="=")
na.omit(out[order(out$ID),][-2])
#   ID Key Val
# 1  1  zx   1
# 3  1  ds   4
# 5  1  xx   6
# 2  2  qw   5
# 4  2  df   2

dplyrish

library(tidyr)
library(dplyr)
df %>% 
  mutate(KeyValPairs = strsplit(as.character(KeyValPairs), "; ")) %>% 
  unnest(KeyValPairs) %>% 
  separate(KeyValPairs, into = c("key", "val"), "=")
#courtesy of @jeremycg

数据

df <- structure(list(ID = c(1, 2), KeyValPairs = structure(c(2L, 1L
), .Label = c(" qw=5; df=2", " zx=1; ds=4; xx=6"), class = "factor")), .Names = c("ID", 
"KeyValPairs"), class = "data.frame", row.names = c(NA, -2L))

关于r - 从 R 数据框列中提取键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33015950/

相关文章:

r - 跳过循环中的偶然错误

r - 使用ggplot2时如何更改箱线图的顺序?

r - 创建描述特定值的现有索引位置的新变量

R-数据帧-转换为稀疏矩阵

r - ggplot2 版本 3.2.0 和 bayesAB 绘图冲突

r - 在R中运行多个脚本组件时将错误消息追加到日志文件

python - Excel大数据计算(PCA...)

python - 如何根据 pandas 中的给定键更改背景单元格颜色?

r - 在 NA 上传播值

r - 如何将数据框中的列转换为行名