示例数据框:
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/