【问题标题】:Reshape a weird wide format to long in R [duplicate]在R中将一个奇怪的宽格式改造成长[重复]
【发布时间】:2020-07-12 07:17:32
【问题描述】:

我有一个这种方式的数据集。注意var2character

var1 var2
a    "b:2, d:4"
b    "a:1, b:3, c:4, d:2"
c    "a:3"
d    "b:2, d:4, a:1"

我想把它改成长格式

var1 var2 value
a    b    2
a    d    4
b    a    1
b    b    3
...
d    d    4
d    a    1

我很想对行进行迭代,但速度对我来说是一个问题。实现这一点的更有效方法是什么?

【问题讨论】:

  • 请使用dput()添加您的数据集。
  • 我认为您想分两步完成此操作:1)将第 2 列中的字符串拆分为键值对作为 2 个新列,然后 2)将宽格式转换为长格式。

标签: r dataframe


【解决方案1】:

您可以使用separate_rows 获取以逗号分隔的不同行中的数据(,)和separate 获取以冒号分隔的不同列中的数据(:)。

library(tidyr)
df %>%
  separate_rows(var2, sep = ',\\s*') %>%
  separate(var2, c('var2', 'value'), sep = ':', convert = TRUE)

# A tibble: 10 x 3
#   var1  var2  value
#   <chr> <chr> <int>
# 1 a     b         2
# 2 a     d         4
# 3 b     a         1
# 4 b     b         3
# 5 b     c         4
# 6 b     d         2
# 7 c     a         3
# 8 d     b         2
# 9 d     d         4
#10 d     a         1

数据

df <- structure(list(var1 = c("a", "b", "c", "d"), var2 = c("b:2, d:4", 
"a:1, b:3, c:4, d:2", "a:3", "b:2, d:4, a:1")), class = "data.frame",
row.names = c(NA, -4L))

【讨论】:

  • 哇,这非常有帮助!谢谢!
猜你喜欢
  • 2018-11-18
  • 2021-08-01
相关资源
最近更新 更多