Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择R中每行的最后2个值_R - Fatal编程技术网

选择R中每行的最后2个值

选择R中每行的最后2个值,r,R,我想选择R中每行的最后2个值(忽略NA),并将最后2个值放在新的data.frame中 这是一个可重复的例子 V10 V11 V12 V13 V14 V15 1 116 174 NA NA NA NA 2 NA NA NA NA NA NA 3 NA NA NA NA NA NA 4 NA NA NA NA NA NA 5 NA NA NA NA NA NA 6 N

我想选择R中每行的最后2个值(忽略NA),并将最后2个值放在新的data.frame中

这是一个可重复的例子

       V10 V11 V12 V13 V14 V15
1      116 174  NA  NA  NA  NA
2       NA  NA  NA  NA  NA  NA
3       NA  NA  NA  NA  NA  NA
4       NA  NA  NA  NA  NA  NA
5       NA  NA  NA  NA  NA  NA
6       NA  NA  NA  NA  NA  NA
7       NA  NA  NA  NA  NA  NA
957594 115 116 120 613 127 127
957595  NA  NA  NA  NA  NA  NA
957596  NA  NA  NA  NA  NA  NA

 tss2 <- structure(list(V10 = c(116L, NA, NA, NA, NA, NA, NA, 115L, NA,NA),
    V11 = c(174L, NA, NA, NA, NA, NA, NA, 116L, NA, NA),
    V12 = c(NA,NA, NA, NA, NA, NA, NA, 120L, NA, NA),
    V13 = c(NA, NA, NA, NA,NA, NA, NA, 613L, NA, NA),
    V14 = c(NA, NA, NA, NA, NA, NA, NA,127L, NA, NA),
    V15 = c(NA, NA, NA, NA, NA, NA, NA, 127L,
    NA,NA)), .Names = c("V10", "V11", "V12", "V13",
    "V14", "V15"), class = "data.frame", row.names
    = c(1L,2L, 3L, 4L, 5L, 6L, 7L, 957594L, 957595L, 957596L))

您可以使用以下循环:

new_data <- list()
for(i in 1:nrow(tss2)) {
  new_data[[i]] <- tail(as.numeric(tss2[i, ][complete.cases(as.numeric(tss2[i, ]))]), 2)
}
new_data <- new_data[lapply(new_data, length) == 2]
new_data <- t(matrix(unlist(new_data), ncol = 2))

new_data您可以使用以下循环:

new_data <- list()
for(i in 1:nrow(tss2)) {
  new_data[[i]] <- tail(as.numeric(tss2[i, ][complete.cases(as.numeric(tss2[i, ]))]), 2)
}
new_data <- new_data[lapply(new_data, length) == 2]
new_data <- t(matrix(unlist(new_data), ncol = 2))

new_data转换为矩阵可能会加快速度:

ma = apply(as.matrix(tss2), MARGIN = 1, FUN = function(x) tail(na.omit(x), 2))

# risky version: should work *if* there aren't rows with exactly one non-missing element
matrix(unlist((ma)), ncol = 2, byrow = T)
#      [,1] [,2]
# [1,]  116  174
# [2,]  127  127

# safe version
matrix(unlist((ma[sapply(ma, function(x) length(x) == 2)])), ncol = 2, byrow = T)

转换为矩阵可能会加快速度:

ma = apply(as.matrix(tss2), MARGIN = 1, FUN = function(x) tail(na.omit(x), 2))

# risky version: should work *if* there aren't rows with exactly one non-missing element
matrix(unlist((ma)), ncol = 2, byrow = T)
#      [,1] [,2]
# [1,]  116  174
# [2,]  127  127

# safe version
matrix(unlist((ma[sapply(ma, function(x) length(x) == 2)])), ncol = 2, byrow = T)


我不理解你的重复示例,但是
tail(yourdata,2)
应该选择任何向量、矩阵、数据、帧、函数等的最后两行(部分)。@Therkel我添加了visualexample@Therkel我想他们希望前两个值从右到左读取每一行,忽略
NA
sw如果一行中只有一个数字怎么办?@Chris问得好,我不介意是否忽略它。我不理解你的重复示例,但是
tail(yourdata,2)
应该选择任何向量、矩阵、data.frame的最后两行(部分),功能等@Therkel我添加了视觉example@Therkel我想他们希望前两个值从右到左读取每一行,忽略
NA
s如果一行中只有一个数字怎么办?@Chris问得好,我不介意是否忽略它。我在代码中又添加了一行。Gregors代码应该更快。我在代码中又添加了一行。格雷戈斯的代码应该更快。嗨@Gregor我在矩阵中得到了这个错误
错误(unlist((ma[sapply(ma,any)]),ncol=2,byrow=T):“数据”必须是向量类型,为“NULL”此外:有50个或更多的警告(使用warnings()查看前50个)
对于第二部分来说不够
矩阵(unlist(ma),ncol=2,byrow=T)
要玩这个把戏吗?它在您的示例数据上就像一个符咒。如果您可以确定一个子集的数据来演示问题并共享它,我可以尝试进行调试,但我没有太多的事情要做as-is.Hmmm,但是如果某些行只有一个未丢失的元素,则可能会有风险。更新更安全。你好@Gregor我在矩阵中得到了这个错误
错误(unlist((ma[sapply(ma,any)]),ncol=2,byrow=T):“数据”必须是向量类型,为“NULL”此外:有50个或更多的警告(使用warnings()查看前50个)
第二部分不够
矩阵(unlist(ma),ncol=2,byrow=T)
要玩这个把戏吗?它在您的示例数据上就像一个符咒。如果您可以确定一个子集的数据来演示问题并共享它,我可以尝试进行调试,但我没有太多的事情要做as-is.Hmmm,但是如果某些行只有一个未丢失的元素,则可能会有风险。更新更安全。