我有一个如下所示的数据框:
x1 x2 a b c
1 7 5 1 0 0
2 3 6 1 0 0
3 2 -1 0 1 0
4 0 1 0 1 0
5 0 6 1 0 0
6 8 10 0 0 1
7 14 8 0 0 1
8 12 11 0 0 1
9 11 13 0 0 1
10 10 12 0 0 1
我希望在a = 1时对x1的值求和。我以为我可以使用if语句并具有以下内容:
if(X$a==0){
result = sum(X$a)
}
我希望得到如下输出:
result = 10
实现这一目标的最佳方式是什么?
答案 0 :(得分:0)
您也可以使用dplyr。代码是:
library(dplyr)
df<-data.frame(x1=c(7,3,2,0,0,8,14,12,11,10),
a = c(1,1,0,0,1,0,0,0,0,0))
df %>%
summarise(result = sum(x1[a==1]))
你在管道中推送df,并要求总结一个名为&#34; result&#34;的变量。列x1的总和,但仅限于== 1。
同样使用dplyr,但使用更明确的子集:
df %>%
filter(a==1) %>%
summarise(result=sum(x1))
首先过滤a == 1的行,然后总结剩余的x1。
没有dplyr的另一种方式:
df$result<-df$x1*df$a
colSums(df)[3]
这是有效的,因为a列中的值为1或0,因此当a列中存在零时,乘积将为零。