首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:构建应用函数,根据其他(相关)列中的条件查找最小列数

R:构建应用函数,根据其他(相关)列中的条件查找最小列数
EN

Stack Overflow用户
提问于 2013-03-09 22:41:11
回答 1查看 2.7K关注 0票数 0

有了下面这样的数据,我正在尝试重新分配任何测试协议(test_A等)。到其相应的时间间隔(time_A等)如果测试为真,则找到所有真实测试时间中的最小值。

代码语言:javascript
复制
     [ID] [time_A] [time_B] [time_C] [test_A] [test_B] [test_C] [min_true_time]
[1,]    1        2        3        4    FALSE     TRUE     FALSE          ?
[2,]    2       -4        5        6     TRUE     TRUE     FALSE          ?
[3,]    3        6        1       -2     TRUE     TRUE      TRUE          ?
[4,]    4       -2        3        4     TRUE    FALSE     FALSE          ?

我的实际数据集非常大,所以我在if和for循环中的尝试都失败了。但是我不能在应用函数上取得任何进展。

更负的时间,比方说-2将被认为是第3行的最小时间。

欢迎提出任何建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-09 23:09:59

您没有提供太多信息,但我认为这可以满足您的需求。不知道它是否足够有效,因为你没有说你的数据集实际上有多大。

代码语言:javascript
复制
#I assume your data is in a data.frame:
df <- read.table(text="ID time_A time_B time_C test_A test_B test_C 
1    1        2        3        4    FALSE     TRUE     FALSE
2    2       -4        5        6     TRUE     TRUE     FALSE
3    3        6        1       -2     TRUE     TRUE      TRUE
4    4       -2        3        4     TRUE    FALSE     FALSE")


#loop over all rows and subset column 2:4 with column 5:7, then take the mins
df$min_true_time <- sapply(1:nrow(df), function(i) min(df[i,2:4][unlist(df[i,5:7])]))
df
#  ID time_A time_B time_C test_A test_B test_C min_true_time
#1  1      2      3      4  FALSE   TRUE  FALSE             3
#2  2     -4      5      6   TRUE   TRUE  FALSE            -4
#3  3      6      1     -2   TRUE   TRUE   TRUE            -2
#4  4     -2      3      4   TRUE  FALSE  FALSE            -2

另一种方式,可能更快(我没有心情进行基准测试):

代码语言:javascript
复制
m <- as.matrix(df[,2:4])
m[!df[,5:7]] <- NA
df$min_true_time <- apply(m,1,min,na.rm=TRUE)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15311917

复制
相关文章

相似问题

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