r - 如何根据名称而不是索引选择数据框中的列范围?

标签 r dataframe subset code-conversion

在这样创建的 Pandas 数据框中:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(10, size=(6, 6)),
                  columns=['c' + str(i) for i in range(6)],
                  index=["r" + str(i) for i in range(6)])

可能如下所示:
    c0  c1  c2  c3  c4  c5
r0   2   7   3   3   2   8
r1   6   9   6   7   9   1
r2   4   0   9   8   4   2
r3   9   0   4   3   5   4
r4   7   6   8   8   0   8
r5   0   6   1   8   2   2

我可以使用 .loc 轻松选择某些行和/或一系列列:
print df.loc[['r1', 'r5'], 'c1':'c4']

那将返回:
    c1  c2  c3  c4
r1   9   6   7   9
r5   6   1   8   2

因此,我可以在列表中选择特定的行/列,使用冒号的一系列行/列。

如何在 R 中做到这一点? Herehere人们总是必须通过它们的索引来指定所需的列范围,但不能——或者至少我没有找到——通过名称访问那些。举个例子:
df <- data.frame(c1=1:6, c2=2:7, c3=3:8, c4=4:9, c5=5:10, c6=6:11)
rownames(df) <- c('r1', 'r2', 'r3', 'r4', 'r5', 'r6')

命令
df[c('r1', 'r5'),'c1':'c4']

不起作用并引发错误。唯一对我有用的是
df[c('r1', 'r5'), 1:4]

返回
   c1 c2 c3 c4
r1  1  2  3  4
r5  5  6  7  8

但是我将如何按名称而不是索引选择列(当我在整个分析过程中删除某些列时,这可能很重要)?在这种特殊情况下,我当然可以使用 grep但是具有任意名称的列呢?

所以我不想使用
df[c('r1', 'r5'),c('c1','c2', 'c3', 'c4')]

但一个实际的切片。

编辑:

可以找到后续问题 here .

最佳答案

看起来您可以使用 subset 来完成此操作。 :

> df <- data.frame(c1=1:6, c2=2:7, c3=3:8, c4=4:9, c5=5:10, c6=6:11)
> rownames(df) <- c('r1', 'r2', 'r3', 'r4', 'r5', 'r6')
> subset(df, select=c1:c4)
   c1 c2 c3 c4
r1  1  2  3  4
r2  2  3  4  5
r3  3  4  5  6
r4  4  5  6  7
r5  5  6  7  8
r6  6  7  8  9
> subset(df, select=c1:c2)
   c1 c2
r1  1  2
r2  2  3
r3  3  4
r4  4  5
r5  5  6
r6  6  7

如果您想按行名称范围进行子集化,此 hack 将执行以下操作:
> gRI <- function(df, rName) {which(match(rNames, rName) == 1)}
> df[gRI(df,"r2"):gRI(df,"r4"),]
   c1 c2 c3 c4 c5 c6
r2  2  3  4  5  6  7
r3  3  4  5  6  7  8
r4  4  5  6  7  8  9

关于r - 如何根据名称而不是索引选择数据框中的列范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37714152/

相关文章:

r - unnest_longer 给出美元符号而不是正常的 tibble

python - 多项条件数据调整

python-3.x - 将dict转换为数据框,每个值都有重复的键?

python - 从现有数据框的某些列创建新的 Pandas 数据框

r - r 中的时间序列子集

通过子集删除列会引发一元无效参数错误

r - R中的 `=`和 `<-`有什么区别?

r - 如何将字符串转换为聚合分位数?

R中的regrid netcdf数据用于插值

c - 处理非常大的输入集的子集和问题的有效方法