有没有办法在R中用方括号从一列选择另一列?

时间:2019-04-13 00:22:16

标签: r

我知道在subset()中,您可以很容易地拉动从一列开始到另一列结束的每一列。

df <- as.data.frame(state.x77)
subset(df, Frost > 30, select=Illiteracy:Murder)

我知道您可以使用方括号df[df$Frost > 30, 3:5]

有没有一种方法可以重新创建使用列名称的带有括号的子集语句?

2 个答案:

答案 0 :(得分:2)

您会发现

df <- state.x77
df[df[, "Frost"] > 150, c("Illiteracy", "Life Exp", "Murder")]

产生

              Illiteracy Life Exp Murder
Alaska               1.5    69.31   11.3
Colorado             0.7    72.06    6.8
Maine                0.7    70.39    2.7
Minnesota            0.6    72.96    2.3
Montana              0.6    70.56    5.0
Nevada               0.5    69.03   11.5
New Hampshire        0.7    71.23    3.3
North Dakota         0.8    72.78    1.4
South Dakota         0.5    72.08    1.7
Vermont              0.6    71.64    5.5
Wyoming              0.6    70.29    6.9

顺便说一句,state.x77是矩阵,而不是数据帧。作为矩阵,您可以使用

df <- state.x77
df[df[, "Frost"] > 150, which(colnames(df)=="Illiteracy"):which(colnames(df)=="Murder")]

或作为数据框

df <- as.data.frame(state.x77)
df[df[, "Frost"] > 150, which(names(df) == "Illiteracy"):which(names(df) == "Murder")]

产生相同的结果,您可以编写一个函数使其更漂亮

答案 1 :(得分:-1)

使用dplyr的另一种方法

library(dplyr)
df = as.data.frame(state.x77)
df %>% filter(Frost > 30) %>% select(Illiteracy:Murder) %>% head()

  Illiteracy Life Exp Murder
1        1.5    69.31   11.3
2        1.9    70.66   10.1
3        0.7    72.06    6.8
4        1.1    72.48    3.1
5        0.9    70.06    6.2
6        2.0    68.54   13.9