不使用列名对数据框进行子集化

4

我在想是否有更好的方法来做这件事,或者是否可能会遇到一些未预料的麻烦。我需要从数据框中进行子集选择,但是我不想使用列名,我需要通过引用列号来完成它。

data <- data.frame(col1= c(50, 20, NA, 100, 50), 
                   col2= c(NA, 25, 125, 50, NA),
                   col3= c(NA, 100, 15, 55, 25),
                   col4= c(NA, 30, 125, 100, NA),
                   col5= c(80, 25, 75, 40, NA))

假设我想对数据框进行子集操作,并仅保留包含在第5列中的有效数字之前连续3个NA的行。最好的方法是使用以下代码(不使用列名):
sub <- data[(which(is.na(data[2]) & 
                   is.na(data[3]) & 
                   is.na(data[4]) & 
                   !is.na(data[5]))), ]

有人看到这个有问题或者知道更好的方法吗?虽然一切似乎都按照预期工作,但我担心在子集中使用子集。

1个回答

4
如果你想要压缩你的代码,可以试试以下方法:
```HTML

如果您希望简化代码, 可以尝试以下方法:

```
> data[rowSums(is.na(data[2:4])) == 3 & !is.na(data[5]), ]
  col1 col2 col3 col4 col5
1   50   NA   NA   NA   80

为什么第一列被排除在考虑之外? - IRTFM
@BondedDust,根据他们的代码来看,似乎这是OP想要的(尽管他们的描述有点模糊)。 - A5C1D2H2I1M1N2O1R2T1
我刚刚完成了这段代码,晚了12分钟。顺便说一句,soread()是一个非常有用的函数。 :-) - Rich Scriven
1
@BondedDust,我认为他指的是https://github.com/sebastian-c/overflow/blob/master/R/soread.R - A5C1D2H2I1M1N2O1R2T1
好的,虽然我认为我可以看出这里可能适用的传播方式。我已经有一个函数来完成这个工作了,但我想问一个关于阅读SO问题的同源问题,这些问题是动物园或xts屏幕输出。也许在扩展的soread中有自动检测的功能? - IRTFM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接