R:在多个列中循环并在一个函数中使用所有列?
在R中:如何循环多个列并使用自定义函数,该函数从这些列中的每一列接收一个参数并相应地修改这些列 例如,我有以下数据帧:R:在多个列中循环并在一个函数中使用所有列?,r,R,在R中:如何循环多个列并使用自定义函数,该函数从这些列中的每一列接收一个参数并相应地修改这些列 例如,我有以下数据帧: > head(runTimeSep) hours h minutes min 1 70 min NA <NA> 2 21 min NA <NA> 3 106 min NA <NA> 4 75 min NA <NA> 5 14 min NA
> head(runTimeSep)
hours h minutes min
1 70 min NA <NA>
2 21 min NA <NA>
3 106 min NA <NA>
4 75 min NA <NA>
5 14 min NA <NA>
6 82 min NA <NA>
7 1 h 11 min
# convert hours to minutes function
hoursToMins = function(hours, h, minutes, min) {
if (h == 'h' && min == "min") {
(hours = as.numeric(hours)*60+as.numeric(minutes))
}
if (h=="h" && min != "min") {
(hours = as.numeric(hours)*60)
}
}
如何在数据框中的所有列上应用此函数?例如用lappy、ddpply等
编辑:我还尝试了以下操作:
finalRunTime = ifelse(runTimeSep$h == "h", runTimeSep$hours*60, runTimeSep$hours)
head(finalRunTime)
runTimeSep$hours = finalRunTime
效果很好。但当我尝试应用第二轮ifelse时:
finalRunTime = ifelse(runTimeSep$min == "min", runTimeSep$hours + runTimeSep$minutes, runTimeSep$hours)
head(finalRunTime)
runTimeSep$hours = finalRunTime
第二轮导致else案例(如果没有分钟列)变为NA。请帮忙。谢谢
针对@Sandipan的回答:
如何使用哪一个来区分min列是“min”还是NA?我试过:
索引您想要这样的东西:
indices <- which(runTimeSep$h == 'h')
runTimeSep[indices,]$hours <- 60*runTimeSep[indices, ]$hours +
runTimeSep[indices,]$minutes
索引您想要这样的东西:
indices <- which(runTimeSep$h == 'h')
runTimeSep[indices,]$hours <- 60*runTimeSep[indices, ]$hours +
runTimeSep[indices,]$minutes
索引这将为您提供一个按行计算的分钟向量,如果您想要它的总数,那么只需将sum()
环绕在它周围:
with( dat, (h=="h")*60*hours + (h=="min")*hours +
ifelse( is.na(minutes), 0, minutes) )
[1] 70 21 106 75 14 82 71
当分钟数为NA时,它用0代替NA。当需要具有这些值的新列时,可以执行以下操作:
dat$newmins <- with( dat, (h=="h")*60*hours + (h=="min")*hours +
ifelse( is.na(minutes), 0, minutes) )
dat$newmins这将为您提供一个按行计算的分钟向量,如果您想要它的总数,那么只需将它括起来:
with( dat, (h=="h")*60*hours + (h=="min")*hours +
ifelse( is.na(minutes), 0, minutes) )
[1] 70 21 106 75 14 82 71
当分钟数为NA时,它用0代替NA。当需要具有这些值的新列时,可以执行以下操作:
dat$newmins <- with( dat, (h=="h")*60*hours + (h=="min")*hours +
ifelse( is.na(minutes), 0, minutes) )
dat$newmins@ZheyuanLi,为了更容易阅读,我在上面的编辑中发布了我的回复。@ZheyuanLi,为了更容易阅读,我在上面的编辑中发布了我的回复。谢谢,它似乎有效,但似乎缺少条目。与数据帧中的索引95相对应的实际上是向量中的索引92。有没有办法解决这个问题?我意识到这是因为在应用这个函数之前必须从数据框中删除某些行。那么我们如何让向量与数据帧的索引匹配呢?我很难理解到底做了什么。这本可以用作dat$newmins,非常感谢。它似乎工作得很好!谢谢,它似乎工作,但它似乎有丢失的条目。与数据帧中的索引95相对应的实际上是向量中的索引92。有没有办法解决这个问题?我意识到这是因为在应用这个函数之前必须从数据框中删除某些行。那么我们如何让向量与数据帧的索引匹配呢?我很难理解到底做了什么。这本可以用作dat$newmins,非常感谢。它似乎工作得很好!