Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
子集R data.frame按索引和名称排列在一行中_R_Dataframe - Fatal编程技术网

子集R data.frame按索引和名称排列在一行中

子集R data.frame按索引和名称排列在一行中,r,dataframe,R,Dataframe,示例data.frame: 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

示例data.frame:

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

是否有一些函数或软件包允许使用干净/简单的语法(如第三个示例),同时也实现了第四个示例的结果?

Mabe use
dplyr

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

library(dplyr)
df %>% select(a, 3)
如果您事先不知道列的名称,并且希望将其作为变量传递

x <- names(df)[1]
x
[1] "a"

df %>% select_(x, 3)
您可以索引
名称(df)
,而无需使用dplyr:

df <- 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[,c("a",names(df)[3]) ]

在base R中,您可以将
子集
选择
组合

df <- 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 <- subset(df, select = c(a, 3))

df我不这么认为<代码>匹配
是我会做的。看起来不错;我将使用
dplyr
,了解更多信息。你所说的“互动”与“动态”使用是什么意思?
  a c
1 1 7
2 2 8
3 3 9
df <- 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 <- subset(df, select = c(a, 3))