【发布时间】:2016-01-09 21:27:14
【问题描述】:
我正在尝试对数据框进行子集化。数据框将被分成子集,其中每个子集中的最后一个元素在“bool”列中具有“TRUE”值。考虑以下数据框:
df <- data.frame(c(3,1,3,4,1,1,4), rnorm(7))
df <- cbind(df, df[,1] != 1)
names(df) <- c("ind", "var", "bool")
df
# ind var bool
# 1 3 0.02343906 TRUE
# 2 1 0.94786193 FALSE
# 3 3 0.50632766 TRUE
# 4 4 0.24655548 TRUE
# 5 1 -1.58103304 FALSE
# 6 1 0.73999468 FALSE
# 7 4 0.10929906 TRUE
第 1 行应该是一个子集,第 2 行和第 3 行应该是一个子集,第 4 行是一个子集,然后第 5 到第 7 行是一个子集。我在下面的代码有效(我可以在新列上设置子集),但我想知道是否有更“R”的方式来做。
index = 1
for (i in 1:nrow(df))
{
if(df$bool[i])
{df$index[i] = index
index = index + 1
}
else
{df$index[i] = index
}
}
df
# ind var bool index
# 1 3 0.02343906 TRUE 1
# 2 1 0.94786193 FALSE 2
# 3 3 0.50632766 TRUE 2
# 4 4 0.24655548 TRUE 3
# 5 1 -1.58103304 FALSE 4
# 6 1 0.73999468 FALSE 4
# 7 4 0.10929906 TRUE 4
【问题讨论】:
-
为什么第 2 行和第 3 行的 bool 列是 FALSE TRUE 时的子集? 5 到 7 (F F T) 相同。
-
@RichardScriven
bool对每组中的最后一个元素为真 -
josilber 说了什么! - 但他们删除了它,我删除了我的,所以 - TRUE 代表一个组的结束。
-
注意 :) 最终,我将通过新创建的列对这个数据框进行子集化,如果答案将框架拆分为没有新列的子集,我会接受这个答案!
标签: r