Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何基于相同数据的子集在dataframe中创建新列_R_Subset - Fatal编程技术网

如何基于相同数据的子集在dataframe中创建新列

如何基于相同数据的子集在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

对不起,如果这是个愚蠢的问题,我是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 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)