将列添加到包含仅其他行的第一个值的数据框

时间:2016-10-13 21:23:41

标签: r dataframe

我有以下数据框(df):

RT1     RT2    RT3 
0.777   0.323  1.654      
NA      NA     NA      
0.766   0.804  NA      
0.887   NA     NA      
NA      NA     1.271   
0.832   NA     NA      

我想添加一个专栏' RTfirst'它仅在每一行中提供第一个整数(非NA)值,因此它看起来像:

RT1     RT2    RT3     RTFirst
0.777   0.323  1.654   0.777
NA      NA     NA      NA
0.766   0.804  NA      0.766
0.887   NA     NA      0.887
NA      NA     1.271   1.271
0.832   NA     NA      0.832  

我尝试使用&#39; apply&#39;来计算每行的平均RT。功能,然后使用&#39;如果那么&#39;基于每行中的NA数量的计数(例如,如果CountNA <= 1等),但我觉得这可能过于复杂了。

有更明显的解决方案吗?

由于

1 个答案:

答案 0 :(得分:0)

以下是使用purrr包的解决方案:

df <- data.frame(
  RT1 = c(0.777, NA, 0.766, 0.887, NA, 0.832),
  RT2 = c(0.323, NA, 0.804, NA, NA, NA),
  RT3 = c(1.654, NA, NA, NA, 1.271, NA)
)
library(purrr)
m <- as.matrix(df)
RTFirst <- apply(X = m, MARGIN = 1, FUN = function(row) detect(row, function(x) !is.na(x)))
RTFirst <- vapply(RTFirst, function(x) ifelse(is.null(x), NA, x), numeric(1))
cbind(df, RTFirst)

(编辑:我以前没有在他的评论中检查过Rich的解决方案。他实际上更优雅,不需要第三方包。)