在方括号内使用减号
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()
特有的。您可以在方括号内使用 -
来删除您想要的任何特定行或列。如果您的数据框是 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))
;这将删除名为 "var1" 和 "var2".
的列
请注意,删除行和列只会影响调用的输出,不会影响原始对象,除非将输出分配给原始对象。
下面是来自 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()
特有的。您可以在方括号内使用 -
来删除您想要的任何特定行或列。如果您的数据框是 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))
;这将删除名为 "var1" 和 "var2".
请注意,删除行和列只会影响调用的输出,不会影响原始对象,除非将输出分配给原始对象。