【发布时间】:2015-09-01 04:12:43
【问题描述】:
所以我有这样的数据:
a <- data.table("a"=c("1 42"," 84","2 10","3 12"," 24"))
a
1: 1 42
2: 84
3: 2 10
4: 3 12
5: 24
数据是一个单一的排序向量,由 ID 为 1、2 和 3 的字符串以及 ID 上的数据组成。
为了进一步处理,我需要在缺失的地方填写身份证号码。 ID和数据之间的空格数,以及没有ID时数据前的空格数是固定的。在示例中,ID 和数据之间有 4 个空格,如果没有 ID,则有 5 个空格。结果应如下所示:
a <- data.table("a"=c("1 42","1 84","2 10","3 12","3 24"))
a
1: 1 42
2: 1 84
3: 2 10
4: 3 12
5: 3 24
我已经在Excel 中解决了这个问题,方法是将第一个单元格A1 复制到B1 并在B2 中使用这个公式:=IF(LEFT(A2,5)=" ",LEFT(B1,5)&A2,A2)。
我知道这会增加额外的空间,但这对于数据的进一步处理并不重要。
我正在努力寻找 R 中的解决方案,但我找到了 this 和 this 以了解如何在 data.table 中引用先前的值。但是,我一直坚持如何使用这些命令来检查 if 条件和 paste 字符串。
【问题讨论】:
-
输入数据集中只有一列。我认为最好将它放在输出的两列中
-
另外,在您的 Excel 示例中,与上面的示例相反,您还有
B列。 -
@akrun,嗯,这就是我在 Excel 中所做的,但我不知道如何在 R 中开始。我得到了
a[, B := c(NA, a[seq_len(.N-1)])][],它给了我列B,之前的值为a。但我觉得这不是正确的起点。 -
试试
a[, tstrsplit(a, '\\s+')][, V1:=cumsum(V1!='')]
标签: r data.table