【发布时间】:2017-04-08 12:09:31
【问题描述】:
我想通过选择a 和b 的组的最后一个观察值,c 的第一个观察值,将组的每个观察值相加,将第一个表变成第二个表d 和e,对于f,检查是否存在有效日期并使用该日期。
表 1:
ID a b c d e f
1 10 100 1000 10000 100000 ?
1 10 100 1001 10010 100100 5/07/1977
1 11 111 1002 10020 100200 5/07/1977
2 22 222 2000 20000 200000 6/02/1980
3 33 333 3000 30000 300000 20/12/1978
3 33 333 3001 30010 300100 ?
4 40 400 4000 40000 400000 ?
4 40 400 4001 40010 400100 ?
4 40 400 4002 40020 400200 7/06/1944
4 44 444 4003 40030 400300 ?
4 44 444 4004 40040 400400 ?
4 44 444 4005 40050 400500 ?
5 55 555 5000 50000 500000 31/05/1976
5 55 555 5001 50010 500100 31/05/1976
表 2:
ID a b c d e f
1 11 111 1000 30030 300300 5/07/1977
2 22 222 2000 20000 200000 6/02/1980
3 33 333 3000 60010 600100 20/12/1978
4 44 444 4000 240150 2401500 7/06/1944
5 55 555 5000 100010 1000100 31/05/1976
我查看了 StackOverflow 问题,但我只看到了其中的元素。我可以按照以下步骤执行到 e。
library(data.table)
setwd('D:/Work/BRB/StackOverflow')
DT = data.table(fread('datatable.csv', header=TRUE))
AB = DT[ , .SD[.N], ID ]
AB = AB[ , c('a', 'b') ]
C = DT[ , .SD[1], ID ]
C = C[ , 'c' ]
DE = DT[ , .(d = sum(d), e = sum(e)) , by = ID ]
Final = cbind(AB, C, DE)
Final
我的问题是,我可以在一次转换中对变量a、b、c、d、e 进行操作而不必将其拆分为 3?
另外,我不知道该怎么做f。有什么建议吗?
最后,我是 R 新手。我的代码还有什么可以改进的吗?
【问题讨论】:
-
类似:
DT[, .(a = a[.N], b = b[.N], c = c[1], d = sum(d), e = sum(e)), ID]? -
顺便说一句:
fread返回一个 data.table,因此无需将其包装在data.table()
标签: r data.table