【发布时间】:2020-01-15 18:59:32
【问题描述】:
我的数据框是这样的:
data.frame(stringsAsFactors=FALSE,
A = c("1234", "abc.", "e-2.1ad"),
B = c("5-4", "1-0", "a,d")
)
我想将这些列分成包含单个字符的多个列。
我发现的其他答案都涉及使用一些正则表达式或模式或分隔符,如您所见,我在这里做不到,或者使用 sapply 的复杂解决方案(使用了位置,但对我来说没用)。
我确信那里有一个更优雅的解决方案,如果可能的话,我真的很喜欢使用 tidyr 的解决方案,但无论它干净利落,都非常感谢。
这才是它该有的样子,毕竟说了算:
newdf <- data.frame(stringsAsFactors=FALSE,
A1 = c("1", "a", "e"),
A2 = c("2", "b", "-"),
A3 = c("3", "c", "2"),
A4 = c("4", ".", "."),
A5 = c(NA, NA, 1),
A6 = c(NA, NA, "a"),
A7 = c(NA, NA, "d"),
B1 = c("5", "1", "a"),
B2 = c("-", "-", ","),
B3 = c("4", "0", "d")
)
而且,如果答案不仅仅是抛出一个或两个函数,如果您能解释一下您是如何进行的,而不仅仅是解决方案本身,我将不胜感激。谢谢!
稍后编辑:我几乎可以使用qdap 包来完成它,但我可以绕过它用字符串开头的字符填充应该是 NA(因为字符串的长度不等)。文档中没有解释的非常奇怪的行为,否则是一个非常有前途的功能。
我在尝试解决这个问题时注意到的另一个奇怪行为是自动从字符转换为因子。但是,我无法确定沿途发生的位置。
【问题讨论】:
-
“5-432”中的 32 会发生什么?
-
@Elin!感谢您的关注。这是我这边的一个错误。为了简单起见,我现在删除了额外的“32”。本来,这应该意味着 B 需要其他 3 列,B4 和 B5,第一行有 3 和 2,其他行有 NA。
标签: r string tidyverse data-cleaning data-munging