通过缩进

时间:2015-06-23 18:20:43

标签: r excel

我有一个很大的.csv文件,其中列变量是嵌套/缩进的行:

enter image description here

  • 公司= ACME
  • Client = Widgets LP
  • 项目= 2 - 家庭安全
  • ..等

我希望通过提取嵌套/缩进的变量并将它们粘贴到列中来将此文件整形为整洁的数据:

enter image description here

注意:缩进实际上是5个空格,(10个空格,15个空格......)

编辑1 :请发表建设性批评意见

1 个答案:

答案 0 :(得分:1)

最好有一个可重复的例子。这是一个开始:

df <- data.frame(x=c('a', ' b', '  c', ' d', 'e'), y = 1:5, stringsAsFactors=F)
df
    x y
1   a 1
2   b 2
3   c 3
4   d 4
5   e 5

它看起来像一个普通的数据框,但空间仍然存在。我编写了一个脚本来计算第一列中缩进的空格量。然后它会将这些计数添加到数据框中。

spaces <- gregexpr('\\s', df$x)
counts <- lapply(spaces, attr, which='match.length')
indx <- lapply(counts, function(x) length(x[x > 0]))
df$z <- indx
df
    x y z
1   a 1 0
2   b 2 1
3   c 3 2
4   d 4 1
5   e 5 0

如果有人能够在大于零的列上找到一种“走宽”的方法,同时保持添加列与右行分组,那么问题就会得到解决。

据我所知,预期的输出是:

newdf <- data.frame(x=c(rep('a', 4), 'e'), 
                    one= c(NA,'b', 'b', 'd',NA), 
                    two= c(NA, NA, 'c', NA, NA), y=1:5)
newdf
  x  one  two y
1 a <NA> <NA> 1
2 a    b <NA> 2
3 a    b    c 3
4 a    d <NA> 4
5 e <NA> <NA> 5