如何基于相同数据的子集在dataframe中创建新列
对不起,如果这是个愚蠢的问题,我是R的新手。 我有这样一个数据集:如何基于相同数据的子集在dataframe中创建新列,r,subset,R,Subset,对不起,如果这是个愚蠢的问题,我是R的新手。 我有这样一个数据集: t a b 1 1 1 0 2 2 1 0 3 3 1 4 4 4 1 0 5 5 1 2 6 1 2 0 7 2 2 1 8 3 2 3 9 4 2 0 10 5 2 5 t a b c 1 1 1 0 1 2 2 1 0 1 3 3 1 4 0 4 4 1 0 0 5 5 1 2 0 6 1 2 0 1 7 2 2 1 0 8 3 2 3 0 9 4 2 0 0 10 5 2
t a b
1 1 1 0
2 2 1 0
3 3 1 4
4 4 1 0
5 5 1 2
6 1 2 0
7 2 2 1
8 3 2 3
9 4 2 0
10 5 2 5
t a b c
1 1 1 0 1
2 2 1 0 1
3 3 1 4 0
4 4 1 0 0
5 5 1 2 0
6 1 2 0 1
7 2 2 1 0
8 3 2 3 0
9 4 2 0 0
10 5 2 5 0
我想添加一个新的列c
,如果b
为零,并且以前的b
按a
分组的列不为零,如果不为零,该列将打开。基本上,我想根据t
索引为每个a
标记前导零。结果应该如下所示:
t a b
1 1 1 0
2 2 1 0
3 3 1 4
4 4 1 0
5 5 1 2
6 1 2 0
7 2 2 1
8 3 2 3
9 4 2 0
10 5 2 5
t a b c
1 1 1 0 1
2 2 1 0 1
3 3 1 4 0
4 4 1 0 0
5 5 1 2 0
6 1 2 0 1
7 2 2 1 0
8 3 2 3 0
9 4 2 0 0
10 5 2 5 0
我试着跑步
data.c <- ifelse(nrow(subset(data, t < data$t & a == data$a & b != 0)) == 0 & data$b == 0, 1, 0)
使用
dplyr
和cumsum
进行以下操作如何:
require(dplyr);
df %>%
group_by(a) %>%
arrange(a, time) %>%
mutate(c = ifelse(b != 0 | cumsum(b) > 0, 0, 1)) %>%
ungroup();
# time a b c
# <int> <int> <int> <dbl>
# 1 1 1 0 1.00
# 2 2 1 0 1.00
# 3 3 1 4 0
# 4 4 1 0 0
# 5 5 1 2 0
# 6 1 2 0 1.00
# 7 2 2 1 0
# 8 3 2 3 0
# 9 4 2 0 0
#10 5 2 5 0
require(dplyr);
df%>%
组别(a)%>%
安排(时间)%>%
变异(c=ifelse(b!=0 | cumsum(b)>0,0,1))%>%
解组();
#时间a b c
#
# 1 1 1 0 1.00
# 2 2 1 0 1.00
# 3 3 1 4 0
# 4 4 1 0 0
# 5 5 1 2 0
# 6 1 2 0 1.00
# 7 2 2 1 0
# 8 3 2 3 0
# 9 4 2 0 0
#10 5 2 5 0
样本数据
df是否愿意提供一个可复制的示例?当然,添加了一个可复制的示例。谢谢,在安装dplyr和magrittr之后,这一切都成功了。为什么这是可行的,但子集不可行?不完全确定nrow(子集(数据,t
将始终为零,因为t
未在任何地方定义。您也不需要在子集
中明确引用数据
。例如,使用子集(数据,时间==2)
而不是子集(数据,数据$time==2)
。