1

我想有一个功能来拆分这样的数据帧:

q1  q2  q3  q4
1   4   0   33
8   5   33  44
na  na  na  na
na  na  na  na
3   33  2   66
4   2   3   88
6  44   5   99

我们将获得 2 个数据帧:

d1
q1  q2  q3  q4
1   4   0   33
8   5   33  44

d2
3   33  2     66
4   2   3     88
6   44  5     99

d1 和 d2 中的 obs 不固定。这意味着我们不知道数据框中的 obs 以及有多少 obs 是 NA。

4

2 回答 2

1

假设DF是数据框。由于没有准确地指定分割标准是什么,我们假设任何带有所有NAs 的行都是分割行。如果它的一些其他标准适当地改变了第一行:

isNA <- apply(is.na(DF), 1, all)
split(DF[ !isNA, ], cumsum( isNA )[ !isNA ])
于 2013-03-23T18:24:07.823 回答
0

首先,读入您的数据,以便将“na”转换为实际NA值。

mydf <- read.table(
  header = TRUE, 
  na.strings="na", 
  text = "q1 q2 q3 q4
          1 4 0 33
          8 5 33 44
          na na na na
          3 33 2 66
          4 2 3 88
          6 44 5 99")

其次,弄清楚在哪里分割你的data.frame

# Find the rows where *all* the values are `NA`
RLE <- rle(rowSums(is.na(mydf)) == ncol(mydf))$lengths
# Use that to create "groups" of rows
RLE2 <- rep(seq_along(RLE), RLE)
# Replace even numbered rows with NA -- we don't want them
RLE2[RLE2 %% 2 == 0] <- NA

三、拆分你的data.frame

split(mydf, RLE2)
# $`1`
#   q1 q2 q3 q4
# 1  1  4  0 33
# 2  8  5 33 44
# 
# $`3`
#   q1 q2 q3 q4
# 4  3 33  2 66
# 5  4  2  3 88
# 6  6 44  5 99

但是,这一切都有些猜测,因为您所说的“这意味着我们不知道数据框中的 obs 以及有多少 obs 是 NA”并不是很清楚。在这里,我假设您希望在遇到一整行NA值时拆分数据。

于 2013-03-23T18:11:39.190 回答