我有以下数据集:
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
答案 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