2017-09-26 63 views
1

我是一个初学者,学习如何从R中的数据集中特定的行和列进行子集划分。我使用state.x77 R Studio中的数据集作为练习。当我尝试选择指定的列时,出现以下错误消息:子集data.frame中的特定列和行 - 错误消息“...中的意外符号”

library(dplyr) 
library(tibble) 

select(state.x77, Income, HS Grad) 
Error: unexpected symbol in "select(state.x77, Income, HS Grad" 

我不明白该行代码中的哪个符号不正确。另外,如果我想除了选择某些列(变量)之外还要筛选某个状态,那么当状态列表是行名称时,如何使用筛选器函数?当我尝试:

rownames_to_column(state.x77, var = "State") 

它创建了一个名为国家,为国家的名字列,但它似乎没有永久当我去查看state.x77(因此我无法使用过滤功能)。

对不起,我是一个非常初学者。任何帮助,将不胜感激。

谢谢。

回答

1

有两个问题。首先,state.x77是矩阵,所以您需要将它转换为数据帧,因为dplyr包中的select函数仅将数据帧作为第一个参数。其次,如果列名中有空格,则必须使用“或”来包围列名。

# Load package 
library(dplyr) 

# Show the class of state.x77 
class(state.x77) 
# [1] "matrix" 

# Convert state.x77 to a data frame 
state.x77_df <- as.data.frame(state.x77) 

# Show the class of state.x77_df 
class(state.x77_df) 
[1] "data.frame" 

# Select Income and `HS Grad` columns 
# All the following will work 
select(state.x77_df, Income, `HS Grad`) 
select(state.x77_df, "Income", "HS Grad") 
select(state.x77_df, c("Income", "HS Grad")) 

对于第二个问题,您必须将输出保存回对象,如下所示。

library(tibble) 

state.x77_df <- rownames_to_column(state.x77_df, var = "State") 
head(state.x77_df) 
     State Population Income Illiteracy Life Exp Murder HS Grad Frost Area 
1 Alabama  3615 3624  2.1 69.05 15.1 41.3 20 50708 
2  Alaska  365 6315  1.5 69.31 11.3 66.7 152 566432 
3 Arizona  2212 4530  1.8 70.55 7.8 58.1 15 113417 
4 Arkansas  2110 3378  1.9 70.66 10.1 39.9 65 51945 
5 California  21198 5114  1.1 71.71 10.3 62.6 20 156361 
6 Colorado  2541 4884  0.7 72.06 6.8 63.9 166 103766 
+0

这是非常翔实。非常感谢。 – jp334

+0

@ jp334我很乐意提供帮助。如果您认为这对您的问题有帮助,请接受此帖作为答案。 – www

0
# Convert state.x77 into a dataframe and renaming rowname into State column 
df <- tibble::rownames_to_column(data.frame(state.x77), var = "State") 

## You can select any columns by their column names or by index 
# by column names 
col_names <- c("Income", "HS.Grad") 
df[,col_names] 

# by column index 
col_index <- c(3,7) 
df[, col_index] 

# Filtering(subsetting) data by state 
subset(df, df$State == "Arizona") 

State Population Income Illiteracy Life.Exp Murder HS.Grad Frost Area 
Arizona  2212 4530  1.8 70.55  7.8 58.1  15 113417