r - 使用 apply() 但获得类列表答案
问题描述
我有一系列列data.frame
,我想在其中获取最后一个值,不包括任何 NA。我用来完成这项工作的功能是
last_value <- function(x) tail(x[!is.na(x)], 1)
对于每个观察(按行),我正在使用apply()
这个函数在 13 列中工作。
df$LastVal<-apply(df[,c(116, 561, 1006, 1451, 1896, 2341, 2786, 3231,
3676, 4121, 4566, 5011, 5456)], 1, FUN=last_value)
我的问题是输出作为 5336(总观察值)的列表出现,而不仅仅是按行的最后一个值的向量。答案似乎在那里,但又以列表的形式出现。我以前用过这个功能,效果很好。当我str()
我的列时,它们都是整数。如果没有值而只有 NA,这个函数会被绊倒吗?
我应该补充一点,当我unlist()
使用新变量时,我收到一个错误,上面写着“替换有 4649 行,数据有 5336”,所以我认为这可能与 NA 有关。
解决方案
首先,您需要查看使用一行值last_value
定义的函数的输出。NA
last_value <- function(x) tail(x[!is.na(x)], 1)
df <- matrix(1:24, 4)
df[2, ] <- NA
df <- as.data.frame(df)
apply(df, 1, last_value)
#[[1]]
#V6
#21
#
#[[2]]
#named integer(0)
#
#[[3]]
#V6
#23
#
#[[4]]
#V6
#24
问题是该列表的第二个成员的长度为零。这意味着unlist
不会解决问题。
您必须测试长度为零的值。
last_value <- function(x) {
y <- tail(x[!is.na(x)], 1)
if(length(y) == 0) NA else y
}
apply(df, 1, last_value)
#[1] 21 NA 23 24
推荐阅读
- swift - 已解决 - Swift 枚举 - 将嵌套枚举转换为字符串枚举以允许 .rawValue
- c# - Excel 中的当地时间格式
- firebase - firebase_storage object-not-found 在所需的参考颤动处不存在对象
- sql-server - 从 SQL Server 中的时间窗口创建分组(组和岛)
- java - 如何在 Selenium Webdriver 上保持按键
- react-native - React Native 导航
- metal - 金属深度夹紧
- javascript - 返回原始值的布尔版本的最有效方法是什么?
- java - 我的打印功能在输入后要求输入显示
- microsoft-graph-api - Microsoft Graph SharePoint 列表项未正确展开