以下是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]
?我只知道方括号用于选择某些列或行。这让我很困惑。
答案 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;。
请注意,删除行和列只会影响调用的输出,除非将输出分配给原始对象,否则不会影响原始对象。