如何搜索具有相同列值的行并插入行(如果不存在)?

时间:2015-07-08 21:18:18

标签: python r bash

我有以下数据集:

  CVSO Band   Period       pvalue
1    4    R 1.063372 5.383864e-03
2    4    V 1.652512 1.543246e-17
3   27    V 6.114795 2.174296e-12
4   24    I 7.163776 1.014593e-17
5   24    R 7.164236 0.000000e+00
6   24    V 7.171452 3.342914e-14

对于第一列中的每个值,我想搜索Band I,R和V是否存在。例如,在我的数据集中,4只有Band R和V,而24有三个band。如果一个或多个波段不存在,我想添加NA行,以便得到以下输出:

  CVSO Band   Period       pvalue
1    4    I       NA           NA
2    4    R 1.063372 5.383864e-03
3    4    V 1.652512 1.543246e-17
4   27    I       NA           NA
5   27    R       NA           NA
6   27    V 6.114795 2.174296e-12
7   24    I 7.163776 1.014593e-17
8   24    R 7.164236 0.000000e+00
9   24    V 7.171452 3.342914e-14

1 个答案:

答案 0 :(得分:4)

(使用R)这是一个可能的data.table解决方案

library(data.table)
lookup <- c("I", "R", "V")
res <- setDT(df)[, .SD[match(lookup, Band)] , by = CVSO][, Band := lookup]
res
#    CVSO Band   Period       pvalue
# 1:    4    I       NA           NA
# 2:    4    R 1.063372 5.383864e-03
# 3:    4    V 1.652512 1.543246e-17
# 4:   27    I       NA           NA
# 5:   27    R       NA           NA
# 6:   27    V 6.114795 2.174296e-12
# 7:   24    I 7.163776 1.014593e-17
# 8:   24    R 7.164236 0.000000e+00
# 9:   24    V 7.171452 3.342914e-14