使用 R 重新排列数据
Using R to Rearrange Data
我正在处理 R
中的一些数据。为了再现性,数据如下:
month,source,amount1,amount2,total
jan,central,200,400,600
jan,tax,100,200,300
jan,fines,100,200,300
jan,east,150,50,200
jan,tax,100,25,125
jan,fine,0,75,75
jan,levies,0,0,0
Jan,tithe,0,0,0
请注意,central
的金额是 tax
和 fines
的总和。我想通过添加一个包含术语中心的列来重新排列数据,如下所示。
month,source,amount1,amount2,total,new_column
jan,tax,100,200,300,central
jan,fines,100,200,300,central
jan,tax,100,25,125,east
jan,fine,0,75,75,east
jan,levies,0,0,0,east
Jan,tithe,0,0,0,east
感谢您的帮助。注意行数不统一。
假设有一种行顺序模式:“source”、“tax”、“fine”,我们可以 split 每 3 行,删除第一行,添加新列从第一行“源”列开始,然后 rbind 结果:
do.call(rbind,
lapply(split(x, rep(1:(nrow(x)/3), each = 3)), function(i){
res <- i[2:nrow(i), ]
res$new_column <- i[1, "source" ]
res
}))
# month source amount1 amount2 total new_column
# 1.2 jan tax 100 200 300 central
# 1.3 jan fines 100 200 300 central
# 2.5 jan tax 100 25 125 east
# 2.6 jan fine 0 75 75 east
我建议您尽可能更改源数据。罚款、税收和中部或东部的数据似乎不应该放在同一列中。 Central 或 East 可能代表位置数据,而罚款和税收是收入来源。
我正在处理 R
中的一些数据。为了再现性,数据如下:
month,source,amount1,amount2,total
jan,central,200,400,600
jan,tax,100,200,300
jan,fines,100,200,300
jan,east,150,50,200
jan,tax,100,25,125
jan,fine,0,75,75
jan,levies,0,0,0
Jan,tithe,0,0,0
请注意,central
的金额是 tax
和 fines
的总和。我想通过添加一个包含术语中心的列来重新排列数据,如下所示。
month,source,amount1,amount2,total,new_column
jan,tax,100,200,300,central
jan,fines,100,200,300,central
jan,tax,100,25,125,east
jan,fine,0,75,75,east
jan,levies,0,0,0,east
Jan,tithe,0,0,0,east
感谢您的帮助。注意行数不统一。
假设有一种行顺序模式:“source”、“tax”、“fine”,我们可以 split 每 3 行,删除第一行,添加新列从第一行“源”列开始,然后 rbind 结果:
do.call(rbind,
lapply(split(x, rep(1:(nrow(x)/3), each = 3)), function(i){
res <- i[2:nrow(i), ]
res$new_column <- i[1, "source" ]
res
}))
# month source amount1 amount2 total new_column
# 1.2 jan tax 100 200 300 central
# 1.3 jan fines 100 200 300 central
# 2.5 jan tax 100 25 125 east
# 2.6 jan fine 0 75 75 east
我建议您尽可能更改源数据。罚款、税收和中部或东部的数据似乎不应该放在同一列中。 Central 或 East 可能代表位置数据,而罚款和税收是收入来源。