我试图从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并读取他们遇到的第二个整数。
答案 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