在R中,如何获取包含NA,字符串和整数

时间:2015-06-04 21:34:20

标签: r rstudio

我试图从read.table获取表格中的倒数第二个整数。我一直试图做一个从右下角到右下角搜索的循环,直到它找到一个整数,然后我将在它之前检索整数。充满未知数量的NA值接近[nrow,ncol],直到它达到整数或字符串。我一直在尝试使用此代码但它确实有效

y=0
 while (grep("^[[:digit:]]*$", b[nrow(b),ncol(b)-y])!=1) {y=y+1}
c$end<-b[nrow(b),ncol(b)-y]

不知何故y保持为0,即使b [nrow(b),ncos(b)]是一个字符串而不是一个整数。 当我试图扭转这一点并做

grep("^[[:digit:]]*$", b[nrow(b),ncol(b)-y])!=1

它说&#34; =&#34;是出乎意料的,所以也许在while语句中出现了问题。 如果您知道问题所在或知道更好的编码方式,请告诉我。

编辑: 所以这里是read.table,如果它让它更清晰 所以最后一行看起来像这样。我对表格最后一行中的倒数第二个数字感兴趣,这是226882

17               1 round-14 224382 140 yellow 226882 190   red 226882 190 crash

但由于数据不均匀而且有时是本

中的最后一行,因此很困难
13               1 round-10 161612 150 yellow 164112 200   red     NA  NA  

在这种情况下,我想要164112.所以我一直在尝试编写一个从右到左读取的代码,忽略最后的NA并读取他们遇到的第二个整数。

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,试试这个:

set.seed(7)
df <- data.frame(matrix(sample(c(NA, 1, 2, 3, 4), 12, replace=T), 4))
  X1 X2 X3
1  4  1 NA
2  1  3  2
3 NA  1 NA
4 NA  4  1

unname(tail(na.omit(unlist(df)), 2)[1])
[1] 2

如果您需要以行方式完成,请先执行此操作,df <- data.frame(t(df))

unname(tail(na.omit(unlist(df)), 2)[1])
[1] 4

为了响应您的编辑,我将添加字符串。上面的相同函数调用将起作用,

df$X4 <- c(NA, NA, NA, NA)
df$X5 <- c(NA, NA, NA, 'blue')
df[4,1] <- 'red'
df
    X1 X2 X3 X4   X5
1    4  1 NA NA <NA>
2    1  3  2 NA <NA>
3 <NA>  1 NA NA <NA>
4  red  4  1 NA blue

根据您的示例,您希望4返回

df[] <- lapply(df, as.numeric)
df <- data.frame(t(df))
unname(tail(na.omit(unlist(df)), 2)[1])
[1] 4