我有一个这样的数据框:
我想根据"?"将第二列拆分成多列。然而这并不容易,因为刺中还有其他问号。因此,每个子字符串都包含' http'是唯一的共同点。
如何分割它们?输出示例中的列数只是一个示例,我不确切知道可以生成多少列。
输入数据示例:
df_in <- data.frame(x = c('x1','x2','x3','x4'),
y = c('http://example1.com?https://example2.com', 'NA', 'http://example3.com?id=1234?https://example4/com?http://example6.com', 'http://example5.com'))
在控制台中打印的数据框:
df_in
x y
x1 http://example1.com?https://example2.com
x2 NA
x3 http://example3.com?id=1234?https://example4/com?http://example6.com
x4 http://example5.com
预期产出的例子:
df_out <- data.frame(x = c('x1','x2','x3','x4'),
col1 = c('http://example1.com', 'NA', 'http://example3.com?id=1234', 'http://example5.com'),
col2 = c('https://example2.com', 'NA', 'https://example4/com', 'NA'),
col3 = c('NA', 'NA', 'https://example6/com', 'NA'))
控制台中打印的输出:
x col1 col2 col3
x1 http://example1.com https://example2.com NA
x2 NA NA NA
x3 http://example3.com?id=1234 https://example4/com https://example6/com
x4 http://example5.com NA NA
答案 0 :(得分:5)
我们可以使用中的
separate
来分隔列&#39; y&#39;通过在tidyr
?
处分隔成多列
http
答案 1 :(得分:4)
如果要分割任意数量的域,因此不知道要生成的列数,可以使用cSplit
包中的splitstackshape
函数。但是,在此之前,我们需要在?http
之前添加一个分隔符,即
library(splitstackshape)
df_in$y <- gsub('(\\w)(\\?h)', '\\1_\\2', df_in$y)
cSplit(df_in 'y', '_?')
#Or all in one line,
cSplit(transform(df_in, y = gsub('(\\w)(\\?h)', '\\1_\\2', y)), 'y', '_?')
给出,
x y_1 y_2 y_3 1: x1 http://example1.com https://example2.com NA 2: x2 NA NA NA 3: x3 http://example3.com?id=1234 https://example4/com http://example6.com 4: x4 http://example5.com NA NA