首先,讀入您的數據,以便將「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以及NAs有多少obs「不是很清楚。在這裏,我假設您想要在遇到整行NA
值時分割數據。
+1我被這種難以置信的簡單和優雅同時錯綜複雜的風格所震撼。 – 2013-03-24 00:28:34