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