按行选择一行中的最后一个非 NA 值
我有一个数据框,其中每一行都是不同长度的值的向量。我想创建每行中最后一个真实值的向量。
以下是一个示例数据框:
df <- read.table(tc <- textConnection("
var1 var2 var3 var4
1 2 NA NA
4 4 NA 6
2 NA 3 NA
4 4 4 4
1 NA NA NA"), header = TRUE); close(tc)
因此,我想要的值向量为 c(2,6,3,4,1)
。
我只是不知道如何让 R 识别最后一个值。
任何帮助表示赞赏!
I have a data frame where each row is a vector of values of varying lengths. I would like to create a vector of the last true value in each row.
Here is an example data frame:
df <- read.table(tc <- textConnection("
var1 var2 var3 var4
1 2 NA NA
4 4 NA 6
2 NA 3 NA
4 4 4 4
1 NA NA NA"), header = TRUE); close(tc)
The vector of values I want would therefore be c(2,6,3,4,1)
.
I just can't figure out how to get R to identify the last value.
Any help is appreciated!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
通过组合三件事来实现此目的:
is.na
识别NA
值 使用tail
查找向量中的最后一个值apply< /code> 将此函数应用于
data.frame
中的每一行代码:
Do this by combining three things:
NA
values withis.na
tail
apply
to apply this function to each row in thedata.frame
The code:
这是使用矩阵子集的答案:
此 max.col 调用将选择每行中最后一个非 NA 值的位置(如果它们都是 NA,则选择第一个位置)。
Here's an answer using matrix subsetting:
This
max.col
call will select the position of the last non-NA value in each row (or select the first position if they are all NA).这是另一个版本,在获取反转输入的第一个元素之前删除所有无穷大、NA 和 NaN:
Here's another version that removes all infinities, NA, and NaN's before taking the first element of the reversed input:
dplyr 的一种替代方法是使用
coalesce
并反转所选列的顺序:要使用
tidy
选择,可以创建一个辅助函数coacross
将coalesce
与across
一起使用,并使用rev
反转名称的顺序:A dplyr alternative is to use
coalesce
and reverse the order of the selected columns:To make use of
tidy
selection, one can create an auxiliary functioncoacross
to usecoalesce
withacross
, and userev
to reverse the order of the names: