【发布时间】:2019-06-22 06:19:12
【问题描述】:
我有一个类似于以下内容的数据框列:
ColA
""
"1"
"1,9"
"9,19"
"1,9,19"
数据框中有数百行,数字 1-30 可以出现在逗号分隔的列表中。我想将这些值分隔到它们自己的列中,并用布尔值指示该数字是否存在。
colA_1 colA_9 colA_19
1 0 0
1 1 0
0 1 1
1 1 1
例如,我知道使用 grepl("[1][9]",df$ColA) 将获取所需的行,然后我可以使用它为数字 19 创建一个新列,但我无法弄清楚获取单个的正则表达式是什么数字数字(例如 1)而不抓取其他数字(例如 11 或 21)。我承认我对正则表达式不是很熟悉,而且通常不需要使用它们。但是我的几次谷歌搜索都是徒劳的。
如果它只是一个字符串,unlist 和 strsplit 的组合就可以解决问题,但我不知道如何在不迭代行的情况下将其应用于数据帧的整个列。
我想学习一个不使用循环的解决方案,它可以使用正则表达式或任何可以完成工作的东西。
【问题讨论】:
-
试试
table(stack(setNames(strsplit(df1$ColA, ","), seq_len(nrow(df1))))[2:1]) -
就可以了。我需要仔细检查并确保我理解它的工作原理,但感谢您的解决方案!
标签: r