在R中以NA分割单列数据帧

时间:2014-09-19 19:57:57

标签: r

我有一个大型数据集,我想分成单独的单位。现在,这些单位障碍以NA标记,但我该如何拆分?样本集:

df=matrix(c(1,2,3,4,NA,6,7,8,NA,10,11,12),ncol=1,byrow=TRUE)

给我们

       [,1]
 [1,]    1
 [2,]    2
 [3,]    3
 [4,]    4
 [5,]   NA
 [6,]    6
 [7,]    7
 [8,]    8
 [9,]   NA
[10,]    10
[11,]    11
[12,]    12

我希望这三个存储在单独的变量中,例如

a
      [,1]
 [1,]    1
 [2,]    2
 [3,]    3
 [4,]    4
b
      [,1]
 [1,]    6
 [2,]    7
 [3,]    8
c
      [,1]
 [1,]    10
 [2,]    11
 [3,]    12

这有意义吗?感谢。

2 个答案:

答案 0 :(得分:2)

删除缺失值后使用splitcumsum的一行解决方案:

 split(df[!is.na(df)],cumsum(is.na(df))[!is.na(df)])
$`0`
[1] 1 2 3 4

$`1`
[1] 6 7 8

$`2`
[1] 10 11 12

答案 1 :(得分:1)

我不确定“数据集”是否表示真正的矩阵或data.frame。这是一个data.frame示例,矩阵类似

df <- data.frame(a=c(1,2,3,4,NA,6,7,8,NA,10,11,12))
gg <- ifelse(is.na(df$a),NA, cumsum(is.na(df$a)))
split(df, gg)

我们只是使用gg作为新变量来计算每次看到NA时的数量,以便我们可以将这些部分分组。我们还保留NA值以丢弃它们以进行拆分。最后split()使用这个新的分类变量做我们想要的。

$`0`
  a
1 1
2 2
3 3
4 4

$`1`
  a
6 6
7 7
8 8

$`2`
    a
10 10
11 11
12 12