在方括号内使用减号

the use of minus sign inside square brackets

下面是来自 Datacamp 的练习。

使用 cbind() 调用来包含所有三个工作表。确保删除 urban_sheet2 和 urban_sheet3 的第一列,这样您就没有重复的列。将结果存储在 urban.

代码:

# 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]?我只知道方括号用于选择某些列或行。这让我很困惑。

这不是 cbind() 特有的。您可以在方括号内使用 - 来删除您想要的任何特定行或列。如果您的数据框是 dfdf[,-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));这将删除名为 "var1" 和 "var2".

的列

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