【问题标题】:Sum unique character with condition将唯一字符与条件相加
【发布时间】:2017-04-18 11:13:26
【问题描述】:

我想创建一个带有条件的独特字符的总和。

这是我的数据测试(.csv):

 $ lot       : Factor w/ 3 levels "lot1","lot4",..: 1 1 1 2 3
 $ usl       : int  2 2 3 1 2
 $ site_value: int  1 6 1 2 4

lot  usl   site_value
lot1  2       1
lot1  2       6
lot1  3       1
lot4  1       2
lot5  2       4

我提出了这个条件:

nbLotOOC<-sum(test$usl > test$site_value)

我的结果是2。但我会计算满足条件的手数。我的结果应该是1。不知道用什么函数或方法。

【问题讨论】:

  • 如果你运行test$usl &gt; test$site_value,你会得到1 0 1 0 0(1 = True,0 = FALSE)。如果你把它加起来,你会得到2

标签: r sum conditional-statements


【解决方案1】:

你可以这样做:

sum(tapply(test$usl>test$site_value, test$lot, FUN=any)>0) # or
which(tapply(test$usl>test$site_value, test$lot, FUN=any)>0)

来自nicola的评论:

sum(aggregate(test$usl>test$site_value, list(test$lot), any)$x)

数据:

test <- read.table(header=TRUE, text=
"lot  usl   site_value
lot1  2       1
lot1  2       6
lot1  3       1
lot4  1       2
lot5  2       4")

【讨论】:

  • @LaurentCesaro 请参阅tapply()any() 的文档
【解决方案2】:

你可以找到满足条件的索引,选择lot列,找到唯一的出现,然后检查那个向量的长度:

length(unique(test[test$usl > test$site_value, "lot"]))

【讨论】:

  • 你有什么结果?我有 0 个。
猜你喜欢
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多