r - 在R中将奇怪的宽格式重塑为长
问题描述
我有一个以这种方式的数据集。请注意,这var2
是character
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
我很想遍历这些行,但速度对我来说是一个问题。实现这一点的更有效方法是什么?
解决方案
您可以使用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))
推荐阅读
- python - 有没有办法确定 python 字符串与另一个字符串不同的索引?
- gulp - 浏览器同步中的白名单和黑名单有什么作用?
- python - 在 Python 中使用 Plotly 的 MemoryError
- javascript - 为段落提供 HTML 输出
- java - 这段代码是使用代理模式还是单例模式,还是两者都使用?
- ios - SwiftUI 静态列表奇怪的重用行为
- python - 如何将 TimeDsitributed 层用于神经网络集成(特别是 CNN+LSTM)?
- publish - 发布到 github 包私有注册表时出现 Lerna 404
- arrays - Julia - 从 UInt8 数组中读取 UInt32
- configuration - 有效范围的 YAML 配置