我想要一个分割数据帧的功能:
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和有多少个NA。
答案 0 :(得分:1)
假设DF
是数据框。由于没有精确指定分裂标准是什么,因此假设所有NA
s的行都是分隔行。如果其他一些标准适当改变第一行:
isNA <- apply(is.na(DF), 1, all)
split(DF[ !isNA, ], cumsum( isNA )[ !isNA ])
答案 1 :(得分: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
然而,这有点猜测,因为你的陈述“这意味着我们不知道数据框中的障碍和有多少障碍是NA”并不是很清楚。在这里,我假设您希望在遇到整行NA
值时分割数据。