首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大数据帧上的条件If语句

大数据帧上的条件If语句
EN

Stack Overflow用户
提问于 2018-08-20 21:25:32
回答 1查看 130关注 0票数 0

我正在寻找从R中的数据框架中检索信息的最直接的方法。数据框架包含几个日期,第0天、第1天、第2天、第3天、第4天、第5天、第6天、第7天和第8天。这些事件列在特定日期上,我们感兴趣的是查找在任何连续两天之间以及存在空条目的日期之间发生的事件(例如。在下表中,这将包括第3至第5天之间的第1行)。

代码语言:javascript
运行
复制
    Person  day0 day1 day2 day3 day4 day5 day6  day7 events
     1      10   12   14   18   NA   22   32   50     20
     2      11   15   19   NA   NA   NA   50   67     35
     3      12   18   21   26   33   42   50   NA     45
     4      15   24   32   NA   43   NA   54   76     40

完整的数据集有几千人。

我试图在头两天检查并将事件写到向量:

代码语言:javascript
运行
复制
for(i in 1:length(days$Person)){
if(days$event[i] != NA){
if(days$day0[i] != NA){
if(days$day1[i] != NA){

 if(days$day0[i] < days$events[i] & days$day1[i] > days$events[i]){
     vector[i]<-events[i]
}
}
}

然而,我继续犯错误。

在if中出错(天$day1i != NA) {:缺少真/假需要的值

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-26 07:12:20

  • 使用data.frame子集比使用for循环和嵌套if更好;
  • 我在data.frame中添加了一个符合过滤器标准的观察,否则示例的输出是空的;
  • 如果将NA添加到任意数字中,结果是NA,则!is.na(events + day0 + day1)是三个嵌套if的缩短版本。
  • 您应该使用函数is.na进行NA检查,因为10 != NA返回NA
  • if-condition会抛出一个错误,如果您提供了NA的话。
  • 最好使用dput(head(your_data.frame))提供输入数据的示例以及所需的输出,这将有助于从社区获得帮助。

请参阅以下代码:

代码语言:javascript
运行
复制
days <- structure(list(Person = 1:5, day0 = c(10L, 11L, 12L, 15L, 1L), 
    day1 = c(12L, 15L, 18L, 24L, 20L), day2 = c(14L, 19L, 21L, 
    32L, 3L), day3 = c(18L, NA, 26L, NA, 4L), day4 = c(NA, NA, 
    33L, 43L, 5L), day5 = c(22L, NA, 42L, NA, 6L), day6 = c(32L, 
    50L, 50L, 54L, 7L), day7 = c(50L, 67L, NA, 76L, 8L), events = c(20L, 
    35L, 45L, 40L, 10L)), class = "data.frame", row.names = c(NA, 
-5L))
vector <- subset(days, !is.na(events + day0 + day1) & day0 < events & day1 > events)[["events"]]
vector

输出是符合您的标准的事件数的向量:

代码语言:javascript
运行
复制
# [1] 10
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51938702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档