在方括号内使用减号

时间:2017-07-10 17:13:28

标签: r dataframe square-bracket

以下是Datacamp的练习。

使用cbind()调用包含所有三张表。确保删除了urban_sheet2和urban_sheet3的第一列,因此您不会有重复的列。将结果存储在城市中。

代码:

# Add code to import data from all three sheets in urbanpop.xls
path <- "urbanpop.xls"
urban_sheet1 <- read.xls(path, sheet = 1, stringsAsFactors = FALSE)
urban_sheet2 <- read.xls(path, sheet = 2, stringsAsFactors = FALSE)
urban_sheet3 <- read.xls(path, sheet = 3, stringsAsFactors = FALSE)

# Extend the cbind() call to include urban_sheet3: urban
urban <- cbind(urban_sheet1, urban_sheet2[-1],urban_sheet3[-1])

# Remove all rows with NAs from urban: urban_clean
urban_clean<-na.omit(urban)

我的问题是为什么使用[-1]删除cbind中的第一列。它是cbind()内方括号的特殊用法吗?这是否意味着如果我想删除前两列代码应为urban_sheet2[-2]?我只知道方括号用于选择某些列或行。这让我很困惑。

1 个答案:

答案 0 :(得分:3)

这不是cbind()特有的。您可以使用方括号内的-删除所需的任何特定行或列。如果您的数据框为df,则df[,-1]将删除其第一列。 df[,-2]将删除第二个(也是第二个)列。 df[,-c(1,2)]将删除第一列和第二列。同样,df[-1,]将删除其第一行,等等。

使用列名无法做到这一点,例如,df[,-"var1"]将无效。要使用列名称,您可以which()使用df[,-which(names(df) %in% "var1")],但只需df[,!names(df) %in% "var1")]就可以轻松获得相同的结果。您还可以使用subset()subset(df, select = -c(var1, var2));这将删除名为&#34; var1&#34;的列。和&#34; var2&#34;。

请注意,删除行和列只会影响调用的输出,除非将输出分配给原始对象,否则不会影响原始对象。