r - 在一行中按索引和名称对 R 数据框进行子集

标签 r dataframe

示例数据框:

structure(list(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9)), .Names = c("a", "b", "c"), row.names = c(NA, -3L), class = "data.frame")

输出:
df
#   a b c
# 1 1 4 7
# 2 2 5 8
# 3 3 6 9

我想获得第一列和第三列,但我想按名称和列索引进行子集化。
df[, "a"]
# [1] 1 2 3

df[, 3]
# [1] 7 8 9

df[, c("a", 3)]
# Error in `[.data.frame`(df, , c("a", 3)) : undefined columns selected

df[, c(match("a", names(df)), 3)]
#   a c
# 1 1 7
# 2 2 8
# 3 3 9

是否有函数或包允许干净/简单的语法,如第三个示例,同时还实现了第四个示例的结果?

最佳答案

马贝使用dplyr ?

用于交互式使用 - 即,如果您提前知道要选择的列的名称

library(dplyr)
df %>% select(a, 3)

如果您事先不知道列的名称,并希望将其作为变量传递,
x <- names(df)[1]
x
[1] "a"

df %>% select_(x, 3)

无论哪种方式,输出都是
#  a c
#1 1 7
#2 2 8
#3 3 9

关于r - 在一行中按索引和名称对 R 数据框进行子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38833530/

相关文章:

r - 根据定义的连续观察次数,在 R 中有条件地删除面板数据中的变量

python - DataFrame 不允许时间戳转换以进行重采样

python - 如何根据 pandas 中的出现重新标记 id

python - 在 pandas 数据框列中查找最高值的更有效方法

r - auto.arima 在Window 和Linux 中提取不同的结果

r - 如何将R中嵌套数据帧的每个元素写入磁盘数据?

r - 在 R 数据帧上操作

python - 数据错误 : No numeric types to aggregate

r - 为什么min/max/sum(c(NA,4,5),na.rm = "xyz")起作用,而具有相同输入的mean()却不起作用?

r - 多行到单个单元格空间分隔 Pandas 中的值,分组依据